lapply
menerapkan fungsi di atas daftar, do.call
memanggil fungsi dengan daftar argumen. Itu tampak sangat berbeda bagi saya ...
Untuk memberi contoh dengan daftar:
X <- list(1:3,4:6,7:9)
Dengan lapply Anda mendapatkan rata-rata dari setiap elemen dalam daftar seperti ini:
> lapply(X,mean)
[[1]]
[1] 2
[[2]]
[1] 5
[[3]]
[1] 8
do.call
memberikan kesalahan, karena rata-rata mengharapkan argumen "trim" menjadi 1.
Di sisi lain, rbind
ikat semua argumen secara searah. Jadi untuk mengikat X berturut-turut, Anda lakukan:
> do.call(rbind,X)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
Jika Anda akan menggunakan lapply
, R akan berlaku rbind
untuk setiap elemen daftar, memberi Anda omong kosong ini:
> 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
Untuk memiliki sesuatu seperti Peta, Anda perlu ?mapply
, yang merupakan sesuatu yang sama sekali berbeda. Untuk mendapatkan misalnya rata-rata setiap elemen dalam X, tetapi dengan pemangkasan yang berbeda, Anda bisa menggunakan:
> mapply(mean,X,trim=c(0,0.5,0.1))
[1] 2 5 8
do.call
hampir sama denganapply
di Lisp