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

How do you store the results of a quantmod loop if the output is a single number?

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

我正在尝试将一些输出超过 .05 的隔夜 return 秒数的代码转换为一个可以采用多个自动收报机的循环。令人沮丧的是,尽管我尽了最大努力,但我显然没有成功地将结果绑定在一起,这可能是因为我习惯使用的 rbind 和 cbind 不适用于单个值,即使它在 DF 中也是如此。我想要结束的是一个数字,(或者我可以加起来的值的 DF),它显示所有输入代码的隔夜 return 值>.05 的数量(存储在TEST.xlsx)。非常感谢您的帮助,非常感谢!

原始(工作)代码:

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 代码文件中第一个代码的(正确)值 - 我的意思是值的数量 >.05

您可以使用 lag 到 select 列中的前一个值,并使用 sum(overnightRtn > 0.05) 检查有多少值大于 0.05。这是完整的代码

library(quantmod)

sym <- c('AAPL', 'GOOG', 'MSFT')
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.vector(de$open/lag(de$close, default = 0) - 1)
  results <- rbind(results, c(i, sum(overnightRtn > 0.05)))
}

results
#     [,1]   [,2]
#[1,] "AAPL" "3" 
#[2,] "GOOG" "4" 
#[3,] "MSFT" "3"