library(xts)
set.seed(1)
x = xts( cbind(a=1:10,b=20:11) , Sys.Date()+1:10 )
y = xts( runif(10) , Sys.Date()+1:10 )
z = x*y
(x, y) でエラーが発生します:適合しない配列*.default
私が望むのは、x の各列に y の値を掛けることです。
期待される結果:
a b
2012-08-04 0.2655087 5.310173
2012-08-05 0.7442478 7.070354
2012-08-06 1.7185601 10.311361
2012-08-07 3.6328312 15.439532
2012-08-08 1.0084097 3.226911
2012-08-09 5.3903381 13.475845
2012-08-10 6.6127269 13.225454
2012-08-11 5.2863823 8.590371
2012-08-12 5.6620264 7.549369
2012-08-13 0.6178627 0.679649
理想的には、ソリューションは次の場合に機能するはずですindex(x)!=index(y)
余談: 私はこのハックを思いついた:
z = xts( apply(x,2,function(col) col*y ) , index(x) )
テストデータでは機能しますが、実際のデータではError in array(ans, c(len.a%/%d2, d.ans), if (!all(vapply(dn.ans, is.null) , : 'dimnames' の長さ [1] が配列の範囲と等しくあり ません (まだテスト データの小さな断片でこれを再現できていません)。
Joshua と DWin による回答にはこの問題がないため、簡潔さだけでなく、結果の質においても優れています。