Saya memiliki fungsi f(var1, var2)
di R. Misalkan kita mengatur var2 = 1
dan sekarang saya ingin menerapkan fungsi f()
ke daftar L
. Pada dasarnya saya ingin mendapatkan daftar L * baru dengan outputnya
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
Bagaimana saya melakukan ini dengan apply
, mapply
atau lapply
?
Jawaban:
Cukup teruskan var2 sebagai argumen tambahan ke salah satu fungsi terapkan.
Ini meneruskan hal yang sama
var2
ke setiap panggilanmyfxn
. Jika sebaliknya Anda ingin setiap panggilanmyfxn
mendapatkan 1st / 2nd / 3rd / etc. elemen keduanyamylist
danvar2
, maka Anda berada dimapply
domain.sumber
myfxn
dapat divektorisasi, dalam hal ini seseorang harus menggunakanmyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Tapi saya mendapatkan kesalahan bahwa argumen 2 cocok dengan beberapa argumen formalvar
bukanvar2
. Aku tidak mengerti maksudmu.Jika fungsi Anda memiliki dua variabel vektor dan harus menghitung sendiri pada setiap nilainya (seperti yang disebutkan oleh @Ari B.Friedman), Anda dapat menggunakan
mapply
sebagai berikut:yang memberi Anda:
sumber
mapply
juga akan mendaur ulang jikavars1
memiliki satu elemen. Misalnya saatvars1 <- 3
,mapply(mult_one, vars1, vars2)
return30 60 90
. Ini berguna ketika Anda ingin menggunakanlapply
argumen kedua dari sebuah fungsi.Untuk lebih menggeneralisasi contoh @ Alexander,
outer
relevan dalam kasus di mana suatu fungsi harus menghitung dirinya sendiri pada setiap pasangan nilai vektor:memberikan:
sumber