4

I want to read prices and compute returns for data obtained from Yahoo, passing over symbols for which data could not be read. The code

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))
}

does not work, giving 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.2523210  

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

How do I use tryCatch properly?

0

2 Answers 2

4
# 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")
      })
      }
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks to you and Joshua Ulrich. I get it now.
1

If all else fails, follow the examples in ?tryCatch. tryCatch(..., error = function(e) e). error is a function, not an expression.

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))
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.