Saya punya pertanyaan tentang melewatkan beberapa argumen ke suatu fungsi, saat menggunakan lapply
in R
.
Ketika saya menggunakan lapply dengan sintaks lapply(input, myfun);
- ini mudah dimengerti, dan saya dapat mendefinisikan myfun seperti itu:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
dan elemen dari input
diteruskan sebagai x
argumen ke myfun
.
Tetapi bagaimana jika saya perlu menyampaikan beberapa argumen lagi myfunc
? Misalnya, didefinisikan seperti itu:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
Bagaimana saya bisa menggunakan fungsi ini dengan melewatkan kedua input
elemen (sebagai x
argumen) dan beberapa argumen lainnya?
Jawaban:
Jika Anda mencari halaman bantuan, salah satu argumennya
lapply
adalah yang misterius...
. Ketika kita melihat bagian Argumen di halaman bantuan, kita menemukan baris berikut:Jadi yang harus Anda lakukan adalah memasukkan argumen Anda yang lain dalam
lapply
panggilan sebagai argumen, seperti:dan
lapply
, mengenali ituarg1
bukan argumen yang tahu apa yang harus dilakukan, secara otomatis akan meneruskannyamyfun
. Semuaapply
fungsi lainnya dapat melakukan hal yang sama.Tambahan: Anda juga dapat menggunakan
...
saat Anda menulis fungsi Anda sendiri. Misalnya, Anda menulis sebuah fungsi yang memanggilplot
di beberapa titik, dan Anda ingin dapat mengubah parameter plot dari pemanggilan fungsi Anda. Anda bisa memasukkan setiap parameter sebagai argumen dalam fungsi Anda, tapi itu mengganggu. Sebagai gantinya Anda bisa menggunakan...
(sebagai argumen untuk fungsi Anda dan panggilan untuk plot di dalamnya), dan memiliki argumen yang tidak dikenali oleh fungsi Anda akan diteruskan secara otomatisplot
.sumber
Seperti yang disarankan oleh Alan, fungsi 'mapply' menerapkan fungsi ke beberapa Daftar Ganda atau Argumen Vektor:
Lihat halaman manual: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
sumber
outer
dengan nada yang sama, yang menerapkan fungsi ke setiap pasangan nilai dalam dua argumen vektor. Halaman manualAnda dapat melakukannya dengan cara berikut:
dan Anda akan mendapatkan jawabannya:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600
sumber
x
adalah vektor atau daftar danmyfun
inlapply(x, myfun)
dipanggil untuk setiap elemenx
secara terpisah.Pilihan 1
Jika Anda ingin menggunakan keseluruhan
arg1
dalam setiapmyfun
panggilan (myfun(x[1], arg1)
,myfun(x[2], arg1)
dll.), Gunakanlapply(x, myfun, arg1)
(seperti yang dinyatakan di atas).pilihan 2
Namun jika Anda ingin memanggil
myfun
setiap elemenarg1
secara terpisah bersama elemenx
(myfun(x[1], arg1[1])
,myfun(x[2], arg1[2])
dll.), Itu tidak mungkin digunakanlapply
. Sebagai gantinya, gunakanmapply(myfun, x, arg1)
(seperti yang disebutkan di atas) atauapply
:atau
sumber