R应用具有多个参数的函数

时间:2011-07-26 08:33:21

标签: r

我在R中有一个函数f(var1, var2)。假设我们设置var2 = 1,现在我想将函数f()应用于列表L。基本上我想得到一个带有输出的新列表L *

[f(L[1],1),f(L[2],1),...,f(L[n],1)]

如何使用applymapplylapply执行此操作?

3 个答案:

答案 0 :(得分:155)

只需将var2作为额外参数传递给其中一个应用函数。

mylist <- list(a=1,b=2,c=3)
myfxn <- function(var1,var2){
  var1*var2
}
var2 <- 2

sapply(mylist,myfxn,var2=var2)

这会将同一个var2传递给myfxn的每次调用。如果您想要myfxn的每次调用获得第1 /第2 /第3 /等等。 mylistvar2的元素,然后您就在mapply的域中。

答案 1 :(得分:28)

如果你的函数有两个向量变量并且必须在它们的每个值上计算自己(如@Ari B.Friedman所述),你可以使用mapply,如下所示:

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
mapply(mult_one,vars1,vars2)

给你:

> mapply(mult_one,vars1,vars2)
[1] 10 40 90

答案 2 :(得分:0)

为进一步概括@Alexander的示例,在函数必须在向量的每个对自身进行计算的情况下,outer是相关的:

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
outer(vars1,vars2,mult_one)

给予:

> outer(vars1, vars2, mult_one)
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]   20   40   60
[3,]   30   60   90