我有一个在R语言中的函数 f(var1, var2)
。假设我们设置 var2 = 1
,现在我想将函数 f()
应用于列表 L
。我的目标是获取一个新的列表 L*,其中包含输出结果。
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
如何使用apply
、mapply
或lapply
来完成这个任务?
我有一个在R语言中的函数 f(var1, var2)
。假设我们设置 var2 = 1
,现在我想将函数 f()
应用于列表 L
。我的目标是获取一个新的列表 L*,其中包含输出结果。
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
如何使用apply
、mapply
或lapply
来完成这个任务?
只需将var2作为额外参数传递给apply函数之一。
mylist <- list(a=1,b=2,c=3)
myfxn <- function(var1,var2){
var1*var2
}
var2 <- 2
sapply(mylist,myfxn,var2=var2)
这会将相同的var2
传递给myfxn
的每个调用。如果您希望每次调用myfxn
都获取mylist
和var2
的第1/2/3等元素,则需要使用mapply
函数。
myfxn
可能是矢量化的,如果是这样,就应该使用 myfxn(unlist(mylist), var2=var2)
。 - baptistesapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
但是,我收到一个错误,表示参数 2 匹配多个形式参数。 - emudrakvar
而不是var2
。R无法理解你的意思。 - Ari B. Friedmanmapply
,方法如下:
如果您的函数需要两个向量变量,并且必须对每个值进行计算(正如@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
vars1
只有一个元素,mapply
也会进行循环。例如,当vars1 <- 3
时,mapply(mult_one, vars1, vars2)
返回30 60 90
。当您想要在函数的第二个参数上使用lapply
时,这非常有用。 - Paul Rougieuxmapply
函数是否支持在调用时传入超过两个参数的函数? - Julienouter
在函数必须在每个向量值对上计算自身的情况下是相关的: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