尝试使用quantmod使用循环分析大量股票。问题是我不知道雅虎是否拥有我需要的所有库存数据所以我试图编程R以便在无法下载时跳过错误,但我似乎无法关闭警告消息。在通常的库启动后,我这样做并获得:
> options(show.error.messages = FALSE)
> getSymbols("gewg", warnings = FALSE)
Warning message:
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, :
cannot open: HTTP status was '404 Not Found'`
知道为什么会这样吗?
编辑: 我已经包含了我用来测试它的代码,可以看出只有NOTE1显示而NOTE2没有出现。我在a2中尝试了一个工作的自动收报机,并且NOTE1和NOTE2都出现了。
> tester2 <- function(){
+ tester <- function() {
+ a <- getSymbols("GOOG", auto.assign = FALSE)
+ cat("NOTE1")
+ a2 <- getSymbols("JWEGOWN", auto.assign = FALSE)
+ cat("NOTE2")
+ a3 <- getSymbols("GS", auto.assign = FALSE)
+ return(a3)
+ }
+ return(try(tester(), TRUE))
+ }
> af <- tester2()
NOTE1Warning message:
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, :
cannot open: HTTP status was '404 Not Found'
>
答案 0 :(得分:1)
执行此类操作的标准方法是使用try
。这看起来像(try
的文档中的示例):
set.seed(123)
x <- stats::rnorm(50)
doit <- function(x)
{
x <- sample(x, replace=TRUE)
if(length(unique(x)) > 30) mean(x)
else stop("too few unique points")
}
## alternative 1
res <- lapply(1:100, function(i) try(doit(x), TRUE))
res
中的结果现在显示正常输出或类try-error
的对象。可以使用以下方法组合列表:
# Replace the errors by `NULL`
res2 = lapply(res,
function(x)
if(!inherits(x, "try-error"))
return(x)
else
return(NULL))
resfinal = do.call("c", res2)
resfinal
现在是一个列表,只有结果没有失败。