如果输出是单个数字,如何存储quantmod循环的结果?

时间:2015-12-26 03:49:51

标签: r quantmod

请注意:我是R新手(问题可能很清楚)。

我试图将一些输出夜间返回次数超过.05的代码转换为可以采用多个代码的循环。令人沮丧的是,尽管我付出了最大的努力,但我显然没有成功地将结果捆绑在一起,也许是因为我曾经习惯使用的rbind和cbind不是单个值,即使它&# 39;在DF中。我想要最终得到的是一个数字,(或我可以添加的值的DF),它显示所有输入代码的过夜返回值> .05(存储在TEST.xlsx的第1列中) 。非常感谢你的帮助,我很感激!

原始(工作)代码:

library(quantmod)
data1 <- getSymbols(Symbols = "AAPL", src = "yahoo", from = Sys.Date() - 525, auto.assign = FALSE)
de = head(data1,365)
colnames(de) <- c("open","high","low","close","volume","adj.")
overnightRtn <- as.data.frame(as.numeric(de[2:nrow(de),"open"])/as.numeric(de[1:(nrow(de)-1),"close"])) - 1
r = overnightRtn[overnightRtn>.05, ]
results = NROW(r)
View(results)

循环尝试:

library(gdata)
d = read.xls("~/Documents/TEST.xlsx", sheet = 1, stringsAsFactors=F)

library(quantmod)
sym <- as.character(d[,1])
results <- NULL

for (i in sym){
  data1 <- try(getSymbols(Symbols = i, src = "yahoo", from = Sys.Date() - 525, auto.assign = FALSE))
  if(inherits(data1, "try-error")) next
  de = head(data1,365)
  colnames(de) <- c("open","high","low","close","volume","adj.")
  overnightRtn <- as.data.frame(as.numeric(de[2:nrow(de),"open"])/as.numeric(de[1:(nrow(de)-1),"close"])) - 1
  r = as.data.frame(overnightRtn[overnightRtn>.05, ])
  x = NROW(r)
  results= rbind(x)
}

colnames(results) = c("overnightRtn")
rownames(results) = sym
View(results)

错误讯息:

Error in `rownames<-`(`*tmp*`, value = c("AAPL", "W")) : 
  length of 'dimnames' [1] not equal to array extent

View(results)的DF是7,我的excel文件中的第一个股票代码的(正确)值 - 我的意思是#的值&gt; .05

1 个答案:

答案 0 :(得分:1)

您可以使用config.assets.paths << Rails.root.join("app", "assets", "plugins", "myPlugin") 选择列中的上一个值,并使用lag检查有多少值大于0.05。这是完整的代码

sum(overnightRtn > 0.05)