![](/img/trans.png)
[英]R use tryCatch within for loop to add row with error values to output
[英]Use tryCatch within R loop
我想讀取價格並計算從Yahoo獲得的數據的回報,並傳遞無法讀取其數據的符號。 編碼
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))
}
不起作用,給出輸出
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
如何正確使用tryCatch?
# 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")
})
}
如果其他所有方法均失敗,請遵循?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))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.