Je voudrais accéder au numéro de ligne actuel dans une itération lapply:
x[1] - y[2] Luke Skywalker & C-3PO x[1] - y[3] Luke Skywalker & R2-D2 x[1] - y[4] Luke Skywalker & Darth Vader x[2] - y[3] C-3PO & R2-D2 x[2] - y[4] C-3PO & Darth Vader x[3] - y[4] R2-D2 & Darth Vader
Dans la deuxième instruction lapply, j'ai besoin d'accéder à l'entrée suivante de la première actuelle, donc à la place de cette sortie
x[1] - y[2] Luke Skywalker & C-3PO x[1] - y[3] Luke Skywalker & R2-D2 x[1] - y[4] Luke Skywalker & Darth Vader x[2] - y[2] C-3PO & C-3PO x[2] - y[3] C-3PO & R2-D2 x[2] - y[4] C-3PO & Darth Vader x[3] - y[2] R2-D2 & C-3PO x[3] - y[3] R2-D2 & R2-D2 x[3] - y[4] R2-D2 & Darth Vader
Je voudrais avoir cette sortie pour éviter d'obtenir la même ligne deux fois
lapply(dplyr::starwars$name[1:3], function(x){ lapply(dplyr::starwars$name[2:4], function(y){ paste(x,'&',y) }) })
Est-ce possible pour récupérer le numéro de la ligne actuelle (premier lapply) et le mettre dans le second lapply?
3 Réponses :
Que diriez-vous d'une approche différente:
combn(starwars$name[1:4], 2, paste, collapse = " & ") [1] "Luke Skywalker & C-3PO" "Luke Skywalker & R2-D2" "Luke Skywalker & Darth Vader" "C-3PO & R2-D2" "C-3PO & Darth Vader" [6] "R2-D2 & Darth Vader"
Merci mais je dois le faire avec lapply, je veux en fait comparer d'énormes ensembles de données avec parLapply
Une façon de le faire est d'utiliser lapply
sur les index, mais se référer aux données à l'intérieur de la fonction
lapply(1:3, function(x){ lapply((x+1):4, function(y){ paste(dplyr::starwars$name[x],'&',dplyr::starwars$name[y]) }) })
Merci beaucoup, cela devrait gagner beaucoup de temps à calculer :)
result<-lapply(dplyr::starwars$name[1:3], function(x){ lapply(dplyr::starwars$name[2:4], function(y){ if(x!=y) paste(x,'&',y) else NULL }) }) unlist(result)
Merci, mais c'est 7 résultats au lieu de 6 ("C-3PO & R2-D2" & "R2-D2 & C-3PO") et cela ne semble pas être aussi efficace à cause des entrées NULL