127

lapply在使用in时,我有一个关于将多个参数传递给函数的问题R

当我将 lapply 与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参数)和其他一些参数来使用这个函数?

4

4 回答 4

148

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

...: optional arguments to ‘FUN’.

因此,您所要做的就是在lapply调用中包含您的其他参数作为参数,如下所示:

lapply(input, myfun, arg1=6)

并且lapply,认识到这arg1不是一个它知道如何处理的论点,将自动将其传递给myfun。所有其他apply功能都可以做同样的事情。

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

于 2013-01-20T17:41:29.617 回答
23

正如 Alan 所建议的,函数 'mapply' 将一个函数应用于多个多个列表或向量参数:

mapply(myfun, arg1, arg2)

参见手册页: https ://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html

于 2016-09-30T15:59:14.307 回答
14

您可以通过以下方式执行此操作:

 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

于 2017-04-17T01:32:30.843 回答
7
myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

x是一个向量或一个列表,并且为 的每个元素分别调用myfunin 。lapply(x, myfun)x

选项1

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

选项 2

但是,如果您想在(等) 的元素旁边分别调用myfun的每个元素,则无法使用. 相反,使用(如上所述)或:arg1xmyfun(x[1], arg1[1])myfun(x[2], arg1[2])lapplymapply(myfun, x, arg1)apply

 apply(cbind(x,arg1), 1, myfun)

或者

 apply(rbind(x,arg1), 2, myfun).
于 2019-11-03T12:23:47.473 回答