2015-03-27 2 views
2

Я хочу прочитать цены и вычислить возврат данных, полученных от Yahoo, передавая символы, для которых данные не могут быть прочитаны. КодИспользовать tryCatch внутри цикла R

library("TTR") 
source("util.r") 
symbols = 
for (sym in c("CSI","XCSIX","IGI")) { 
    cat("\nreading data for",sym,"\n") 
    tryCatch(
    { 
    stk = getYahooData(sym, start = 20000101, end = 20200101, freq = "daily") 
    ndays = length(index(stk)) 
    logret = ((log(stk$Close) - lag(log(stk$Close)))) [2:ndays] 
    print(summary(logret))}, 
    error = cat("could not read data for ",sym)) 
} 

не работает, давая OUTPUT

reading data for CSI 
could not read data for CSI  Index       Close   
Min. :2000-01-04 00:00:00 Min. :-0.1640284 
1st Qu.:2003-10-27 06:00:00 1st Qu.:-0.0028756 
Median :2007-08-16 12:00:00 Median : 0.0000000 
Mean :2007-08-16 05:37:08 Mean : 0.0003147 
3rd Qu.:2011-06-05 06:00:00 3rd Qu.: 0.0037004 
Max. :2015-03-26 00:00:00 Max. : 0.

reading data for XCSIX 
could not read data for XCSIXError in tryCatchOne(expr, names, parentenv, handlers[[1L]]) : 
    attempt to apply non-function 
Calls: tryCatch -> tryCatchList -> tryCatchOne 
In addition: Warning message: 
In file(file, "rt") : cannot open: HTTP status was '404 Not Found' 
Execution halted 

Как использовать tryCatch правильно?

ответ

2
# This may work  
library("TTR") 
    source("util.r") 
    symbols = 
     for (sym in c("CSI","XCSIX","IGI")) { 
     cat("\nreading data for",sym,"\n") 
     tryCatch(
      { 
      stk = getYahooData(sym, start = 20000101, end = 20200101, freq = "daily") 
      ndays = length(index(stk)) 
      logret = ((log(stk$Close) - lag(log(stk$Close)))) [2:ndays] 
      print(summary(logret))}, 
      error=function(err) { 
      cat("Data doesn't exist for company:", sym, "and the error is", conditionMessage(err), "\n") 
     }) 
     } 
+1

Спасибо вам и Джошуа Ульриху. Я получаю это сейчас. – Fortranner

1

Если все остальное не удается, следуйте примерам в ?tryCatch. tryCatch(..., error = function(e) e). error - это функция, а не выражение.

library("TTR") 
for (sym in c("CSI","XCSIX","IGI")) { 
    cat("\nreading data for",sym,"\n") 
    tryCatch(getYahooData(sym, start=20000101, end=20200101), 
      error = function(e) cat("could not read data for ",sym)) 
} 
Смежные вопросы