【问题标题】:Quantmod Error Handling Incorrect TickersQuantmod 错误处理错误代码
【发布时间】:2016-12-04 12:35:16
【问题描述】:

我有一个股票代码列表,我想遍历并获取历史调整后的收盘价。之后我会将输出绑定在一起。但是,如果由于其中一个代码不正确而发现错误,我想 (i) 跳过并抓取下一个代码或 (ii) 将该代码作为错误捕获。这是一些玩具代码:

require(quantmod)

symbols <- c("KO","FANATASTICALLYCOOL","MSFT","LUCKYDEVIL","LMT")
getSymbols(symbols, from="1990-01-01")
prices <- list()
for(i in 1:length(symbols)) {
    prices[[i]] <- try(Ad(get(symbols[i])))
}

prices <- do.call(cbind, prices)
colnames(prices) <- gsub("\\.[A-z]*", "", colnames(prices))

显然,FANTASTICALLYCOOL 和 LUCKYDEVIL 不是真正的股票代码,但奇怪的是,没有出现错误。事实上,这就是我得到的 head(prices)

              KO   FANATASTICALLYCOOL     MSFT       LUCKYDEVIL   LMT
1990-01-02 2.737389    2.737389          0.418482   0.418482    5.970848  
1990-01-03 2.697907    2.697907          0.420840   0.420840    5.934217
1990-01-04 2.684747    2.684747          0.433218   0.433218    5.915902
1990-01-05 2.662812    2.662812          0.422608   0.422608    6.080741
1990-01-08 2.719841    2.719841          0.429092   0.429092    6.025795
1990-01-09 2.697907    2.697907          0.427913   0.427913    5.989164

FANTASTICALLYCOOL 和 LUCKYDEVIL 采用前一个股票代码的值。我要么希望 R 跳过股票代码,要么输入一个充满 NA 的列。

我尝试同时使用 try() 和 tryCatch() 均无济于事。

【问题讨论】:

    标签: r quantmod


    【解决方案1】:

    getSymbols 应该抛出错误。试试

    symbols <- c("KO","FANATASTICALLYCOOL","MSFT","LUCKYDEVIL","LMT")
    out <- sapply(symbols, function(s) tryCatch({
      getSymbols(s , env = NULL)
      }, error = function(e) NA)
    )
    
    dd <- lapply(out, function(x) if (any(is.na(x))) NA else Ad(x))
    dd <- do.call(cbind, dd)
    #            KO.Adjusted FANATASTICALLYCOOL MSFT.Adjusted LUCKYDEVIL LMT.Adjusted
    # 2007-01-03    18.03268                 NA      23.47842         NA     66.64122
    # 2007-01-04    18.04010                 NA      23.43910         NA     66.46724
    # 2007-01-05    17.91389                 NA      23.30543         NA     66.70646
    # 2007-01-08    18.02896                 NA      23.53346         NA     67.91707
    # 2007-01-09    18.04381                 NA      23.55704         NA     67.85182
    # 2007-01-10    18.06979                 NA      23.32116         NA     68.56224
    

    【讨论】:

    • 太棒了!这非常有效。谢谢@Weihuang Wong
    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2018-05-22
    • 2020-12-20
    相关资源
    最近更新 更多