2016-12-04 2 views
0

필자는 반복 작업을 수행하고 조정 완료 마감 가격을 기록하고자하는 주식 시세 표 목록이 있습니다. 그 후에 출력물을 함께 바인딩합니다. 그러나 시세 표시기 중 하나가 잘못되어 오류가 발견되면 (i) 건너 뛰고 다음 시세 표시기를 가져 오거나 (ii) 시세 표시기를 오류로 캡처하려고합니다. 여기에 몇 가지 장난감 코드는 다음과 같습니다 Quantmod 오류 처리시 정확하지 않음

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 실제 시세 아니지만, 이상하게도, 오류가 차기하지

. 사실, 이것은 내가 (가격)

   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()를 사용하여 아무 쓸모가 없어 보았습니다.

답변

2

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 
+0

우수! 이것은 완벽하게 작동했습니다. 감사합니다 @ Wieihang Wong – huesecon