应用多参数函数

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

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

我如何做到这一点,无论是 applymapplylapply

279772 次浏览

只需将 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的每次调用都获得 mylistvar2的第1/2/3/etc 元素,那么您处于 mapply的域中。

如果你的函数有两个向量变量,并且必须计算它们的每个值(如@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

为了进一步推广@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