2011-03-23 65 views
0

我目前使用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过滤器的数据,然后计算汇总值。有没有办法可以更新上面的代码来传递两个参数给函数?

回答

1

通过使用匿名函数。

你不提供工作的例子,所以下面的代码是未经测试,但应该工作:

sapply(unique(d[order(d$Date, d$Id, decreasing=TRUE), c("Date", "Id")]), 
    function(x){WeightedMean(x$Date, x$Id, data=x)}) 
+0

谢谢 - 这个工程。 – user338714 2011-03-23 18:44:50

3

您可以使用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

相关问题