簡體   English   中英

將幾個參數傳遞給 lapply 的 FUN(和其他 *apply)

[英]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是一個向量或列表,並且myfunlapply(x, myfun)被調用的每個元素x分別。

選項1

如果你想使用整個arg1在每個myfun呼叫( myfun(x[1], arg1) myfun(x[2], arg1)等),使用lapply(x, myfun, arg1)如所述的上述)。

選項 2

但是,如果您想將myfunx元素一起分別調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM