2017-09-19 15 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だけを保存したいとします。 明らかに、4番目の列のforループでエラーが発生します(NAsのみを含む)。エラーをtryCatch用いること

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

はスキップされ、ループは継続するが、エラーステートメントはNAは、それがわずか13列を含むことをその結果に付加されていません。

なぜ動作しないのですか?この問題をどのように解決できますか?

答えて

0

これはtryCatchcor.test()機能をラップする必要があり、append()ではないためです。また、ここでforループの代わりにsapply()を使用することもできます。

いくつかのデータ

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を含みます。

関連する問題