具有多个参数的匿名函数

时间:2013-11-05 16:14:52

标签: r

不要问我的例子是否合理,也许有例子如何规避我的问题,但也许不可能将多个参数传递给一个匿名函数,该函数应该分组应用于data.frame < / p>

我有一个data.frame

w <- c("A", "B")
x <- c(1,2)
y <- c(3,4)

df <- data.frame(w,x,y)

现在我想将一个函数应用于每个组(由列w定义),通过将列x和y相乘来创建列z,如

df $ z&lt; - ...(list(df $ x,df $ y),df $ w,FUN = function(x,y){x * y}

实际上,我不是要求乘法的具体答案,我要求语法如何将两个或多个参数应用于匿名函数。

由于约书亚的正确评论,我改变了这个例子,tapply不适用于列表。

任何提示赞赏

汤姆

2 个答案:

答案 0 :(得分:3)

如果我理解正确,这将是一种方式:

do.call(mapply, c(function(x, y) x * y, df[-1]))
# [1] 3 8

data.frame中的列数(删除后,例如ID列)必须与匿名函数中的参数数量相匹配。

或者如果要明确指定列:

mapply(function(x,y) x * y, df$x, df$y)

答案 1 :(得分:2)

当您可以将Reduceapply内置函数与*prod一起使用时,不明白为什么使用匿名用户定义函数。考虑到这个data.frame:

  w x y
1 A 1 3
2 B 2 4
3 A 3 6
4 A 4 1
5 B 5 2

> Reduce("*", df[,-1])
[1]  3  8 18  4 10

> apply(df[,-1], 1, prod)
[1]  3  8 18  4 10