我已经使用lapply
将累积产品计算为数据集上的新列,但我必须获取数据,计算它,然后在 lapply 的每次迭代中使用 assign 覆盖原始数据。我想知道是否有一种更优雅的方式可以自动将新列名分配给 xts 对象
这是一个产生正确结果的模拟示例......它应该可以复制粘贴到 R
library(xts)
x <- xts(matrix(rnorm(10*1000,0.001,0.0001),ncol=10), Sys.Date()-c(1000:1))
colnames(x) <- paste0("x.",c(1:10))
tmp <- lapply(5:20, function(y){
tmp.cum.prod <- rollapply(x,width=y,function(z){
prod(rowMeans(z[,1:10])+1)-1
},by.column=FALSE,align="right")
orig.colnames <- colnames(x)
x <- merge(x,tmp.cum.prod)
colnames(x) <- c(orig.colnames,paste0("cum.prod.",y))
assign("x",x,envir=.GlobalEnv)
})
tail(x)
但我认为可能会改进以下几行:
orig.colnames <- colnames(x)
x <- merge(x,tmp.cum.prod)
colnames(x) <- c(orig.colnames,paste0("cum.prod.",y))
assign("x",x,envir=.GlobalEnv)
有什么建议么?此外,如果您认为上面还有其他可以改进的行(例如使用lapply
),我总是热衷于学习如何编写更优雅的代码。
谢谢