2011-12-14 70 views
0

试图使用quantmod使用循环分析大量库存。问题是我不知道如果雅虎有我需要的所有股票数据,所以我试图编程R跳过错误,当它无法下载,但我似乎无法关闭警告消息。通常库启动后,我这样做,并得到:quantmod覆盖警告消息

> 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'` 

任何想法为什么会发生这种情况?

编辑: 我已经包含了我用来测试它的代码,并且只能看到注1显示出来而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

该脚本仅生成警告,因此它不应该崩溃。你确切的问题是什么? –

+0

基本上我试图在使用循环的股票列表上运行测试,并且每次我在股票代码上运行getSymbol()时,雅虎没有数据会停止循环并给我这个消息。这就是为什么我试图找到一种方法来覆盖它。 – user1097485

+0

哦,我关掉了错误信息,否则有一个错误,说类似于:“download.file中的错误(粘贴(yahoo.URL,”s =“ ,Symbols.name,“&a =”,from.m,: 无法打开URL'http://chart.yahoo.com/table.csv?s=gewg&a=0&b=01&c=2007&d=11&e=14&f=2011&g= d&q = q&y = 0&z = gewg&x = .csv'“ – user1097485

回答

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现在是只没有失败的结果的列表。

+0

我一直在寻找使用try ,但我不确定它是否适合我的情况,因为处理空数据不是问题。 但是,相反,我需要重写错误消息,以便我的循环获取数据可以继续运行,即使其中一些失败 – user1097485

+0

尝试是专门为此:覆盖错误消息。 –

+0

嗯我尝试使用后,你提到它,但它仍然停止中途回路。是否可能是因为函数“getSymbols()”中有某种编码没有响应try? – user1097485