データセットの新しい列として累積積を計算するために使用しlapply
ましたが、データを取得して計算し、ラップの各反復で割り当てを使用して元のデータを上書きする必要がありました。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
)、私は常によりエレガントなコードを書く方法を学びたいと思っています。
ありがとう