【问题标题】:quantmod overriding the warning messagequantmod 覆盖警告消息
【发布时间】:2011-12-14 09:55:54
【问题描述】:

一直在尝试使用 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'
> 

【问题讨论】:

  • 脚本只生成警告,所以它不应该崩溃。你到底是什么问题?
  • 基本上我正在尝试使用循环对股票列表进行测试,每次我在雅虎没有数据的股票代码上运行 getSymbol() 时,它都会停止循环并给出我这个消息。这就是为什么我试图找到一种方法来覆盖它。
  • 哦,我关闭了错误消息,否则会出现类似以下内容的错误:“download.file 中的错误(paste(yahoo.URL,“s=”,Symbols.name,“&a =", from.m, : 无法打开 URL 'chart.yahoo.com/…'"
  • 我想说:接受错误消息并使用 try() 来捕获错误。 (另见下面我的回答)。

标签: r quantmod


【解决方案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 现在是一个列表,其中只有未失败的结果。

【讨论】:

  • 我也一直在考虑使用 try,但是我不确定它是否适合我目前的情况,因为处理空数据不是问题。但相反,我需要覆盖错误消息,以便即使其中一些失败,我的获取数据的循环也可以继续运行。
  • try 专门针对这个:覆盖错误信息。
  • 嗯,在你提到它之后,我尝试使用 try,但它仍然会在中途停止循环。可能是因为函数“getSymbols()”中的某种编码对尝试没有响应?
  • 如果没有可重现的例子,我们很难准确判断出了什么问题。
  • 感谢到目前为止的帮助,我已经编辑了原始帖子以包含我所指的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多