将几个参数传递给 lapplication (和其他 * application)的 FUN

当在 R中使用 lapply时,我有一个关于向函数传递多个参数的问题。

当我使用 lapplication 和 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参数)和其他参数?

132519 次浏览

如果查找帮助页面,lapply的一个参数是神秘的 ...。当我们查看帮助页面的 Arguments 部分时,我们发现以下一行:

...: optional arguments to ‘FUN’.

所以你要做的就是在 lapply调用中包含你的另一个参数作为参数,像这样:

lapply(input, myfun, arg1=6)

lapply认识到 arg1不是一个它知道如何处理的参数,将自动将其传递给 myfun。所有其他 apply函数都可以做同样的事情。

附录: 在编写自己的函数时也可以使用 ...。例如,假设您编写了一个在某个时刻调用 plot的函数,并希望能够从函数调用中更改 plot 参数。您可以将每个参数作为参数包含在函数中,但这很烦人。相反,您可以使用 ...(作为函数的参数以及对函数内部绘图的调用) ,并将函数不能识别的任何参数自动传递给 plot

正如 Alan 所建议的那样,函数 mapplication 将一个函数应用于多个多列表或矢量参数:

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是一个向量或列表,lapply(x, myfun)中的 myfun分别对 x的每个元素进行调用。

选择一

如果您想在每个 myfun调用(myfun(x[1], arg1)myfun(x[2], arg1)等)中使用完整的 arg1,请使用 lapply(x, myfun, arg1)(如上所述)。

选项2

然而,如果您想分别调用 myfunarg1的每个元素以及 x的元素(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).