不要问我的例子是否合理,也许有例子如何规避我的问题,但也许不可能将多个参数传递给一个匿名函数,该函数应该分组应用于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不适用于列表。
任何提示赞赏
汤姆
答案 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)
当您可以将Reduce
或apply
内置函数与*
或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