如何将sapply()与包含两列数据的“列表”一起使用?
问题描述:
我目前使用sapply
调用加权平均函数,它有两个输入端,日期和每个日期多值的日期框,如何将sapply()与包含两列数据的“列表”一起使用?
sapply(unique(sort(d$Date, decreasing=TRUE)), WeightedMean, data=d))
WeightedMean <- function(date, data) {...}
,但我想更新此功能需要三个输入。我已经创建了下面的代码,但我无法在我的WeightedMean
函数来表示这两个输入,
sapply(unique(d[order(d$Date, d$Id, decreasing=TRUE), c("Date", "Id")]),
WeightedMean, data=d)
WeightedMean <- function(date, id, data) {...}
注意,WeightedMean
功能将按日期和ID过滤器的数据,然后计算汇总值。有没有办法可以更新上面的代码来传递两个参数给函数?
答
通过使用匿名函数。
你不提供工作的例子,所以下面的代码是未经测试,但应该工作:
sapply(unique(d[order(d$Date, d$Id, decreasing=TRUE), c("Date", "Id")]),
function(x){WeightedMean(x$Date, x$Id, data=x)})
答
您可以使用mapply
,而是如果sapply
。 (m
的意思是“多重参数”。)
ordered_data <- unique(d[order(d$Date, d$Id, decreasing = TRUE), c("Date", "Id")])
with(ordered_data, mapply(WeightedMean, Date, Id))
+0
这可能比使用'sapply'更好。你知道'sapply'和'mapply'之间是否有显着的性能差异? – user338714 2011-03-23 18:45:56
谢谢 - 这个工程。 – user338714 2011-03-23 18:44:50