2017-09-19 200 views
0

基本數據看起來像這樣有15列和多行:[R tryCatch跳過錯誤的for循環,而不是執行錯誤的語句

X:

Zeit Boesel Dresden.Nord Dresden.Winckelmannstrasse 
    1 01.01.2011 01:00 2741 9961.169  NA 
    2 01.01.2011 02:00 3462 19144.478  NA 
    3 01.01.2011 03:00 3675 10772.111  NA  
    4 01.01.2011 04:00 4550 5255.695  NA  

Y:

Zeit Boesel Dresden.Nord Dresden.Winckelmannstrasse 
    1 01.01.2011 01:00 274.24 272.76  273.27   
    2 01.01.2011 02:00 273.97 272.44  273.10 
    3 01.01.2011 03:00 274.11 272.42  273.09   
    4 01.01.2011 04:00 273.91 272.08  272.48   

我想對這些dfs進行相應列的cor.test,並只保存結果中的p.values。 顯然第四列的for循環發生錯誤(只包含NAs)。

result = numeric() 

    for (i in 2:15) 
    {tryCatch(
     {result = append(result, cor.test(x[,i], y[,i], na.action = "na.omit", method = "spearman")$p.value)}, 
     error=function(e) NA)} 

通過使用tryCatch,會跳過錯誤並繼續循環,但錯誤語句NA不會附加到結果以便它只包含13列。

它爲什麼不起作用,以及如何解決這個問題?

回答

0

這是因爲tryCatch應該包裝cor.test()函數而不是append()之一。此外,您可以在此使用sapply()而不是for循環。

生成一些數據

x <- data.frame(A=sample(1:100, size = 20), 
       B=sample(1:100, size = 20), 
       C=sample(1:100, size = 20), 
       D=sample(1:100, size = 20)) 
y <- data.frame(A=sample(1:100, size = 20), 
       B=sample(1:100, size = 20), 
       C=sample(1:100, size = 20), 
       D=NA) 

而現在的代碼

result <- sapply(2:ncol(x), (function(i){ 
    tryCatch({cor.test(x[,i], y[,i], na.action = "na.omit", method = "spearman")$p.value}, 
     error = function(e) NA) 
})) 
result 
[1] 0.7238886 0.2668126  NA 

現在,result載體包括NA對應於數字向量和一系列NA之間的相關性測試。