Je développe a function that parses a nested list. Malheureusement, à cause de la nature des données brutes, il n'y a vraiment aucun moyen de le faire de cette façon. Les trois derniers bits du code dans la fonction me font un peu peur, mais ils font le travail. Ici, ils sont:Un moyen plus efficace d'analyser les éléments d'une liste imbriquée
mkList <- lapply(rec, function(x){
lapply(regex, function(y) grep(y, x, value = TRUE)) })
rem <- lapply(mkList, function(x){
lapply(x, function(y) sub("[a-z]+,", "", y)) })
lapply(rem, read.as.csv)
Oui, vous voyez que correctement, il est 5 appels consécutifs à lapply
. Et oui, vous l'aurez deviné, read.as.csv
appelle aussi lapply
Pour faire un petit exemple reproductible, tenez compte de la liste imbriquée x
et la suivante « double » lapply
morceau. Le résultat est exactement ce que je veux, mais je suis curieux
Existe-t-il un moyen plus efficace d'appliquer une fonction à la liste interne d'une liste imbriquée?
Les éléments de liste interne sont des vecteurs csv de longueur de chaîne variable.
> (x <- list(list(a = c("a,b,c", "d,e,f"),
b = c("1,2,a,b,c,d", "3,4,e,f,g,h"))))
# [[1]]
# [[1]]$a
# [1] "a,b,c" "d,e,f"
#
# [[1]]$b
# [1] "1,2,a,b,c,d" "3,4,e,f,g,h"
> lapply(x, function(y){
lapply(y, function(z) do.call(rbind, strsplit(z, ",")))
})
# [[1]]
# [[1]]$a
# [,1] [,2] [,3]
# [1,] "a" "b" "c"
# [2,] "d" "e" "f"
#
# [[1]]$b
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] "1" "2" "a" "b" "c" "d"
# [2,] "3" "4" "e" "f" "g" "h"
Vous cherchez peut-être 'rapply' peut-être? 'rapply (x, fonction (y) do.call (rbind, strsplit (y,", ", VRAI)), how =" remplacer ")'. – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto, vous devenez la raison pour laquelle je pose des questions tard dans la nuit. Haha –