我在R中有一个函数f(var1, var2)
。假设我们设置var2 = 1
,现在我想将函数f()
应用于列表L
。基本上我想得到一个带有输出的新列表L *
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
如何使用apply
,mapply
或lapply
执行此操作?
答案 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 /等等。 mylist
和var2
的元素,然后您就在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