如果输出是单个数字,如何存储 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"
请注意:我是 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"