![](/img/trans.png)
[英]XTS replacement error NextMethod(.Generic) : number of items to replace
[英]R xts NextMethod replacement length error
xts对象xts_IndData3包含一个PositionSize属性,该属性记录金融工具中的头寸大小以及其他两个属性。 NewEntrySize为> =0。NewExitSize为<=0。为了避免我在其他地方所讨论的xts错误,我将以下代码放在一起。 我试图避免的错误与在同一表达式中引用两个不同的xts rowID有关。 我仍然无法获取下面的代码。 在此先感谢您的协助。
编辑...我将xts对象转换为数据框。 这是数据和新代码,这些问题使我需要做的事情更加清晰。
> str(TestData)
'data.frame': 12 obs. of 5 variables:
$ DateTime : Date, format: "2012-07-27" "2012-07-27" "2012-07-27" ...
$ NewEntrySize : int 0 0 0 1 0 0 0 0 0 0 0 0...
$ NewExitSize : int 0 0 0 0 0 0 0 0 0 -1 0 0...
$ PositionSize : int 0 0 0 1 0 0 0 0 0 -1 0 0...
$ DesiredResultPositionSize: int 0 0 0 1 1 1 1 1 1 0 0 0...
>
> PositionSizeLag <- 0
> PositionSizeLag <- as.integer( PositionSizeLag )
> TestData$PositionSize <- as.integer( TestData$PositionSize )
> TestData$NewEntrySize <- as.integer( TestData$NewEntrySize )
> TestData$NewExitSize <- as.integer( TestData$NewExitSize )
> for (i in 1 : nrow( TestData )) {
+ TestData[i]$PositionSize <- PositionSizeLag +
+ TestData[i]$NewEntrySize +
+ TestData[i]$NewExitSize
+ PositionSizeLag <- TestData[i]$PositionSize
+ }
Error in `$<-.data.frame`(`*tmp*`, "PositionSize", value = numeric(0)) :
replacement has 0 rows, data has 12
>
我将数据框转换为xts对象。 这是对象的xts版本上的dput(head(xts_TestData))的输出。
> dput(head(xts_TestData))
structure(c("2012-07-27", "2012-07-27", "2012-07-27", "2012-07-27",
"2012-07-27", "2012-07-27", "0", "0", "0", "1", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0",
"0", "1", "1", "1"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1343347200,
1343347200, 1343347200, 1343347200, 1343347200, 1343347200), tzone = "UTC", tclass = "Date"), .Dim = c(6L,
5L), .Dimnames = list(NULL, c("DateTime", "NewEntrySize", "NewExitSize",
"PositionSize", "DesiredResultPositionSize")))
>
您不能像在data.frame中那样在xts对象中混合类型,因此所有as.integer
调用都不会更改xts对象。 在xts对象中也不需要DateTime
列,因为那是由index
属性解决的。
由于[
和$
奇数组合,您在以下代码中遇到错误。 最好先按列(使用$
), 然后按行(使用[
)进行子集化。
PositionSizeLag <- 0
for (i in 1 : nrow( xts_TestData )) {
xts_TestData$PositionSize[i] <- PositionSizeLag +
xts_TestData$NewEntrySize[i] + xts_TestData$NewExitSize[i]
PositionSizeLag <- xts_TestData$PositionSize[i]
}
问题代码中的错误(使用data.frame)是因为TestData[i]
返回data.frame的列 ,而用$
替换data.frame也返回一列。 如果要返回data.frame的行,则需要TestData[i,]
(请注意逗号)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.