for循环在R中不工作

for循环在R中不工作,r,for-loop,xts,zoo,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 require(“quantmod”) getSymbols(“间谍”) ticker花括号是你的朋友,我的朋友。问题是t

代码如下:

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
require(“quantmod”)
getSymbols(“间谍”)

ticker花括号是你的朋友,我的朋友。

问题是ticker[i]不返回数字对象,所以你不能比较或减去它们。试一下这个吧:

str(ticker[15])
ticker[15]-ticker[10]
所以,只要将它们包装成.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
    }
}
require(“quantmod”)
getSymbols(“间谍”)

ticker这与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)

merged.ticker我在for(I in…)后面附上了这些语句,但没有任何帮助。感谢您的解决方案,但更感谢您指出,您需要一个数字对象来进行此类比较。
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)