当试图在所有S&P 500代码机上运行getSplits函数时,我收到以下错误:“open.connection中的错误(文件”,"rt"):HTTP错误404)
如果我对所提供的代码进行子集,并且只运行其中的一部分,我就能够运行该函数。是否有一种方法可以编写一行代码来绕过可能导致HTTP错误的任何代码标记?
library(tidyverse)
library(BatchGetSymbols)
library(quantmod)
tickers <- GetSP500Stocks()
split_env <- lapply(tickers, function(x) getSplits(x))发布于 2020-09-01 18:39:31
您可以使用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发布于 2020-12-04 20:08:44
安装quantmod v. 0.4.17.2以后;CRAN还没有这个版本,所以从github直接安装devtools::install_github("joshuaulrich/quantmod"),因为新版本可以处理多个连接和句柄(检查这),您需要这样做才能将多个请求推送给雅虎。
下面的函数使用多个核。因此,如果您不需要%do%,可以用%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)
}https://stackoverflow.com/questions/63681619
复制相似问题