for循环在R中不起作用

时间:2011-03-24 02:25:09

标签: r for-loop xts zoo

以下是代码:

require("quantmod")

getSymbols("SPY")  

ticker <- SPY[,4]

win <- 0 

for(i in 11:NROW(ticker))

j <- i-10

if(ticker[i] > ticker[j])               

win <- win + 1

我想检查今天的收盘价是否大于10天前收盘价,以及是否要增加赢额变量。我也尝试了以下内容:

for(i in 11:NROW(ticker))

if(ticker[i] > ticker[i-10])               

win <- win + 1             

看起来他们应该工作所以我实际上有两个问题。首先让它工作,但也重要的是理解它们为什么不起作用。两个标志“参数长度为零”。我的预感是它是罪魁祸首[j]或自动收报机[i-10]的罪魁祸首。主要是因为当我用硬编码的值替换它们时,它们起作用。

3 个答案:

答案 0 :(得分:2)

问题是ticker [i]不返回数字对象,因此您无法比较或减去它们。试试这个很有趣:

str(ticker[15])
ticker[15]-ticker[10]

所以,只需将它们包装成as.numeric即可获得所需内容。

require("quantmod")
getSymbols("SPY")  
ticker <- SPY[,4]
win <- 0 
for(i in 11:NROW(ticker)){
    j <- i-10
    if(as.numeric(ticker[i]) > as.numeric(ticker[j])){             
        win <- win + 1
    }
}

答案 1 :(得分:1)

这与for循环无关。这是因为在执行任何操作之前,xts / zoo都按其索引对齐。 ticker[i] > ticker[j]为空,因为索引不同。

你也不需要for循环。你可以通过滞后系列轻松地做到这一点:

merged.ticker <- merge(ticker, lag(ticker,10))
win <- sum(merged.ticker[,1] > merged.ticker[,2], na.rm=TRUE)
lose <- sum(merged.ticker[,1] < merged.ticker[,2], na.rm=TRUE)

答案 2 :(得分:-1)

大括号是你的朋友,我的朋友。