假设我有一个包含数据列的数据框,我想计算每列的单侧移动平均值。为什么这样做
my.rollapply <- function(x){
return(rollapply(x,moving.avg,FUN= mean, fill = NA,align = 'right', na.rm = TRUE))
}
averageData <- apply(averageData, 2, my.rollapply)
但
averageData <- apply(averageData, 2, rollapply, width = moving.avg, FUN = mean, fill = NA, align = 'right', na.rm = TRUE)
给我一个错误
Error in mean.default(newX[, i], ...) :
'trim' must be numeric of length one
这是因为意味着本身需要额外的参数吗?我怎样才能将所有参数传递给apply中的rollapply?
答案 0 :(得分:1)
averageData <- apply(averageData, 2, rollapply, width = moving.avg,
FUN = mean, fill = NA, align = 'right', na.rm = TRUE)
由于一些原因(可能更多),这不起作用(并不是一个好主意):
FUN
是apply
和rollapply
的正式论据。...
传递给rollapply
,传递给mean
。由于FUN
是apply
的正式参数,因此它与apply
来电相匹配,未通过...
传递给rollapply
来电。因此,您的apply
来电被解释为:
apply(X=averageData, MARGIN=2, FUN=mean, rollapply, width=moving.avg,
fill=NA, align='right', na.rm=TRUE)
这意味着mean
循环内的apply
调用是:
mean(tmp[,i], ...)
# which is equivalent to
mean(tmp[,i], rollapply, width=moving.avg, fill=NA, align='right', na.rm=TRUE)
哪个失败是因为trim
参数是rollapply
,它是一个函数,而不是长度为1的数字向量。
无论如何,解决此问题的简单方法是使用by.column
的{{1}}参数:
rollapply