R使用xts时%*%的惯用用法

R使用xts时%*%的惯用用法,r,xts,R,Xts,我正在使用一些代码,这些代码使用%*%操作符将权重向量应用于表示时间序列的向量。我想对时间序列使用xts,但%*%运算符不理解它应该忽略xts索引值 我知道我可以使用coredata将我的系列值作为向量提取出来,对这些值进行操作,然后将它们合并回来,但我想知道是否应该使用一个好的原生xts函数 编辑:说明我在行为上看到的差异的代码示例 library(xts) data(sample_matrix) s<-as.xts(sample_matrix) o_xts<-s$Open c_

我正在使用一些代码,这些代码使用%*%操作符将权重向量应用于表示时间序列的向量。我想对时间序列使用xts,但%*%运算符不理解它应该忽略xts索引值

我知道我可以使用coredata将我的系列值作为向量提取出来,对这些值进行操作,然后将它们合并回来,但我想知道是否应该使用一个好的原生xts函数

编辑:说明我在行为上看到的差异的代码示例

library(xts)
data(sample_matrix)
s<-as.xts(sample_matrix)

o_xts<-s$Open
c_xts<-coredata(s$Open)

len <-length(c_xts)
len2<-len/2
xx<-c_xts[1:len]
outp<-0*0:len2
outp[2] <- xx%*%exp((1:(2*len2))*1.i*pi/len2)
#completes without issue

len <-length(o_xts)
len2<-len/2
yy<-o_xts[1:len]
outp<-0*0:len2
outp[2] <- yy%*%exp((1:(2*len2))*1.i*pi/len2)
Warning message:
In outp[2] <- yy %*% exp((1:(2 * len2)) * (0+1i) * pi/len2) :
  number of items to replace is not a multiple of replacement length

我还没有看到任何证据支持这个问题的前提,当我在helpxts中对第一个示例进行简单测试时,我提出了相反的证据:

> data(sample_matrix)
> sample.xts <- as.xts(sample_matrix, descr='my new xts object')
> str(coredata(sample.xts))
 num [1:180, 1:4] 50 50.2 50.4 50.4 50.2 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "Open" "High" "Low" "Close"
> str(coredata(sample.xts) %*% c(3, 3,3,3) )
 num [1:180, 1] 601 604 604 604 602 ...
> str(sample.xts %*% c(3, 3,3,3) )
 num [1:180, 1] 601 604 604 604 602 ...

我还没有看到任何证据支持这个问题的前提,当我在helpxts中对第一个示例进行简单测试时,我提出了相反的证据:

> data(sample_matrix)
> sample.xts <- as.xts(sample_matrix, descr='my new xts object')
> str(coredata(sample.xts))
 num [1:180, 1:4] 50 50.2 50.4 50.4 50.2 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "Open" "High" "Low" "Close"
> str(coredata(sample.xts) %*% c(3, 3,3,3) )
 num [1:180, 1] 601 604 604 604 602 ...
> str(sample.xts %*% c(3, 3,3,3) )
 num [1:180, 1] 601 604 604 604 602 ...
如果您选中help[.xts,您会注意到drop默认为FALSE。对于普通矩阵,默认为TRUE

这意味着您的xx是一个180元素的向量,而yy是一个180 x 1的矩阵。要在这两种情况下获得相同的行为,您可以使用yy,如果您选中help[.xts,您会注意到drop默认为FALSE。对于普通矩阵,默认为TRUE


这意味着你的xx是一个180元素的向量,而你的yy是一个180 x 1的矩阵。为了在这两种情况下获得相同的行为,你可以使用yy-Stedy-感谢你的澄清编辑。感谢。你能提供一个例子吗?xts/zoo对象只是矩阵,所以它们应该可以工作。Stedy-感谢你的澄清编辑。感谢。你能吗u请提供一个例子?xts/zoo对象只是矩阵,所以它们应该可以正常工作。感谢您显示基本情况正常工作。我显然应该问一个不同的问题。我收到一个错误,我不理解,但不是因为我想的原因。感谢您显示基本情况正常工作。我显然应该问一个不同的问题我犯了一个我不明白的错误,但不是因为我想的原因。