提取多个代码时出现 getSplits (Quantmod) 错误
getSplits (Quantmod) error when pulling multiple tickers
当尝试 运行 所有标准普尔 500 指数代码中的 getSplits 函数时,我收到以下错误“open.connection(file, “rt”) 中的错误:HTTP 错误 404)”
如果我对所提供的代码进行子集化并且仅 运行 其中的一部分,我就能够 运行 该功能。有没有办法编写一行代码来绕过任何可能导致 HTTP 错误的代码?
library(tidyverse)
library(BatchGetSymbols)
library(quantmod)
tickers <- GetSP500Stocks()
split_env <- lapply(tickers, function(x) getSplits(x))
您可以使用try()
来防止它损坏:
library(tidyverse)
library(BatchGetSymbols)
library(quantmod)
tickers <- GetSP500Stocks()[1:20,]
split_env = lapply(tickers$Tickers,function(x)try(getSplits(x)))
names(split_env) = tickers$Tickers
如果我没记错的话,你可以得到没有错误的
head(split_env[sapply(split_env,is.xts)])
$MMM
MMM.spl
1972-06-16 0.5
1987-06-16 0.5
1994-04-11 0.5
2003-09-30 0.5
$ABT
ABT.spl
1981-06-01 0.5000
1986-06-02 0.5000
1990-06-01 0.5000
1992-06-01 0.5000
1998-06-01 0.5000
2004-05-03 0.9356
2013-01-02 0.4798
$ABMD
ABMD.spl
2000-10-02 0.5
$ACN
ACN.spl
2011-12-30 0.1
$ATVI
ATVI.spl
2001-11-21 0.6666667
2003-06-09 0.6666667
2004-03-16 0.6666667
2005-03-23 0.7500000
2005-10-25 0.7500000
2008-09-08 0.5000000
$ADBE
ADBE.spl
1987-03-12 0.5
1988-11-23 0.5
1993-08-11 0.5
1997-07-29 1.0
1997-10-29 1.0
1999-10-27 0.5
2000-10-25 0.5
2005-05-24 0.5
安装 quantmod v. 0.4.17.2 及更高版本; CRAN还没有这个版本,所以直接从github安装devtools::install_github("joshuaulrich/quantmod")
因为新版本可以处理多个连接和句柄(检查this),你需要这个来向雅虎推送多个请求。
以下函数使用多核。因此,如果需要,可以将 %dopar%
替换为 %do%
。
RawData.Splits <- function(stocks, from)
{
x <- foreach(ticker = stocks, .combine = bind_rows
, .errorhandling = "remove", .inorder = F, .multicombine = T
) %dopar%
{
x <- tryCatch({suppressWarnings(
quantmod::getSplits(ticker, from, envir = .GlobalEnv)
)},
error = function(e) {data.frame()})
if(xts::is.xts(x))
{
names(x) <- c("split.ratio")
x <- as.data.frame(x) %>% mutate(split.ds = rownames(.), ticker) %>%
select(ticker, split.ds, split.ratio)
cat(paste0(ticker, "; "))
}
else {x <- data.frame()}
rm(ticker)
return(x)
}
if(nrow(x) > 0)
{ x <- x %>% mutate(split.ds = as.Date(split.ds), updated.on = Sys.Date()) }
rm(stocks, from)
return(x)
}
当尝试 运行 所有标准普尔 500 指数代码中的 getSplits 函数时,我收到以下错误“open.connection(file, “rt”) 中的错误:HTTP 错误 404)”
如果我对所提供的代码进行子集化并且仅 运行 其中的一部分,我就能够 运行 该功能。有没有办法编写一行代码来绕过任何可能导致 HTTP 错误的代码?
library(tidyverse)
library(BatchGetSymbols)
library(quantmod)
tickers <- GetSP500Stocks()
split_env <- lapply(tickers, function(x) getSplits(x))
您可以使用try()
来防止它损坏:
library(tidyverse)
library(BatchGetSymbols)
library(quantmod)
tickers <- GetSP500Stocks()[1:20,]
split_env = lapply(tickers$Tickers,function(x)try(getSplits(x)))
names(split_env) = tickers$Tickers
如果我没记错的话,你可以得到没有错误的
head(split_env[sapply(split_env,is.xts)])
$MMM
MMM.spl
1972-06-16 0.5
1987-06-16 0.5
1994-04-11 0.5
2003-09-30 0.5
$ABT
ABT.spl
1981-06-01 0.5000
1986-06-02 0.5000
1990-06-01 0.5000
1992-06-01 0.5000
1998-06-01 0.5000
2004-05-03 0.9356
2013-01-02 0.4798
$ABMD
ABMD.spl
2000-10-02 0.5
$ACN
ACN.spl
2011-12-30 0.1
$ATVI
ATVI.spl
2001-11-21 0.6666667
2003-06-09 0.6666667
2004-03-16 0.6666667
2005-03-23 0.7500000
2005-10-25 0.7500000
2008-09-08 0.5000000
$ADBE
ADBE.spl
1987-03-12 0.5
1988-11-23 0.5
1993-08-11 0.5
1997-07-29 1.0
1997-10-29 1.0
1999-10-27 0.5
2000-10-25 0.5
2005-05-24 0.5
安装 quantmod v. 0.4.17.2 及更高版本; CRAN还没有这个版本,所以直接从github安装devtools::install_github("joshuaulrich/quantmod")
因为新版本可以处理多个连接和句柄(检查this),你需要这个来向雅虎推送多个请求。
以下函数使用多核。因此,如果需要,可以将 %dopar%
替换为 %do%
。
RawData.Splits <- function(stocks, from)
{
x <- foreach(ticker = stocks, .combine = bind_rows
, .errorhandling = "remove", .inorder = F, .multicombine = T
) %dopar%
{
x <- tryCatch({suppressWarnings(
quantmod::getSplits(ticker, from, envir = .GlobalEnv)
)},
error = function(e) {data.frame()})
if(xts::is.xts(x))
{
names(x) <- c("split.ratio")
x <- as.data.frame(x) %>% mutate(split.ds = rownames(.), ticker) %>%
select(ticker, split.ds, split.ratio)
cat(paste0(ticker, "; "))
}
else {x <- data.frame()}
rm(ticker)
return(x)
}
if(nrow(x) > 0)
{ x <- x %>% mutate(split.ds = as.Date(split.ds), updated.on = Sys.Date()) }
rm(stocks, from)
return(x)
}