lapplyWendet eine Funktion auf eine Liste an und do.callruft eine Funktion mit einer Liste von Argumenten auf. Das sieht für mich nach einem ziemlichen Unterschied aus ...
Um ein Beispiel mit einer Liste zu geben:
X <- list(1:3,4:6,7:9)
Mit lapply erhalten Sie den Mittelwert jedes Elements in der Liste wie folgt:
> lapply(X,mean)
[[1]]
[1] 2
[[2]]
[1] 5
[[3]]
[1] 8
do.call gibt einen Fehler aus, da der Mittelwert erwartet, dass das Argument "trim" 1 ist.
rbindBindet andererseits alle Argumente zeilenweise. Um X zeilenweise zu binden, gehen Sie wie folgt vor:
> do.call(rbind,X)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
Wenn Sie verwenden würden lapply, würde R für rbindjedes Element der Liste gelten, was Ihnen diesen Unsinn gibt:
> lapply(X,rbind)
[[1]]
[,1] [,2] [,3]
[1,] 1 2 3
[[2]]
[,1] [,2] [,3]
[1,] 4 5 6
[[3]]
[,1] [,2] [,3]
[1,] 7 8 9
Um so etwas wie Map zu haben, braucht ?mapplyman etwas ganz anderes. Um zB den Mittelwert jedes Elements in X zu erhalten, aber mit einem anderen Zuschnitt, könnten Sie Folgendes verwenden:
> mapply(mean,X,trim=c(0,0.5,0.1))
[1] 2 5 8
do.callfast das gleiche wieapplyin Lisp