0

不要问我的例子是否合理,也许有一些例子可以绕过我的问题,但也许不可能将多个参数传递给一个应该按组应用于 data.frame 的匿名函数

我有一个 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 <- ...(list(df$x, df$y), df$w, FUN=function(x,y) {x * y}

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

由于 Joshua 的正确评论,我更改了示例,tapply 不适用于列表。

任何提示表示赞赏

汤姆

4

2 回答 2

4

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

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)
于 2013-11-05T16:31:37.750 回答
2

当您可以将内置函数用作Reduceapply*or一起使用时,不明白为什么要使用匿名用户定义函数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
于 2013-11-05T16:23:52.010 回答