[英]passing several arguments to FUN of lapply (and others *apply)
我有一個關於在R
使用lapply
時將多個參數傳遞給函數的問題。
當我將 lapply 與lapply(input, myfun);
的語法一起使用時lapply(input, myfun);
- 這很容易理解,我可以這樣定義 myfun:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
和input
元素作為x
參數傳遞給myfun
。
但是如果我需要向myfunc
傳遞更多參數怎么辦? 例如,它是這樣定義的:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
如何使用此函數傳遞input
元素(作為x
參數)和其他一些參數?
如果您查看幫助頁面, lapply
的論據lapply
是神秘的...
。 當我們查看幫助頁面的 Arguments 部分時,我們發現以下行:
...: optional arguments to ‘FUN’.
所以你所要做的就是在lapply
調用中包含你的另一個參數作為參數,如下所示:
lapply(input, myfun, arg1=6)
和lapply
,認識到arg1
不是它知道如何處理的參數,將自動將其傳遞給myfun
。 所有其他apply
函數都可以做同樣的事情。
附錄:您也可以在編寫自己的函數時使用...
例如,假設您編寫了一個在某個時刻調用plot
的函數,並且您希望能夠從函數調用中更改繪圖參數。 您可以將每個參數作為參數包含在函數中,但這很煩人。 相反,您可以使用...
(作為您的函數和在其中調用 plot 的參數),並將您的函數無法識別的任何參數自動傳遞給plot
。
正如 Alan 所建議的,函數 'mapply' 將一個函數應用於多個多個列表或向量參數:
mapply(myfun, arg1, arg2)
參見手冊頁: https : //stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
您可以通過以下方式進行操作:
myfxn <- function(var1,var2,var3){
var1*var2*var3
}
lapply(1:3,myfxn,var2=2,var3=100)
你會得到答案:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
x
是一個向量或列表,並且myfun
在lapply(x, myfun)
被調用的每個元素x
分別。
選項1
如果你想使用整個arg1
在每個myfun
呼叫( myfun(x[1], arg1)
myfun(x[2], arg1)
等),使用lapply(x, myfun, arg1)
如所述的上述)。
選項 2
但是,如果您想將myfun
與x
元素一起分別調用arg1
每個元素( myfun(x[1], arg1[1])
, myfun(x[2], arg1[2])
等),它是無法使用lapply
。 相反,使用mapply(myfun, x, arg1)
(如上所述)或apply
:
apply(cbind(x,arg1), 1, myfun)
要么
apply(rbind(x,arg1), 2, myfun).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.