2017-09-19 5 views
0

les données de base ressemble à ceci avec 15 colonnes et bien d'autres lignes:R TryCatch saute erreur dans boucle, mais la déclaration d'erreur n'est pas exécutée

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   

Je veux effectuer cor.test sur ces dfs pour les colonnes respectives et enregistrer seulement les p.values ​​dans le résultat. Évidemment, une erreur se produit dans la boucle for pour la quatrième colonne (contient uniquement 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)} 

En utilisant TryCatch l'erreur est ignorée et la boucle continue, mais la déclaration d'erreur NA n'est pas jointe au résultat afin qu'il ne contient que 13 colonnes. Pourquoi cela ne fonctionne-t-il pas et comment ce problème peut-il être résolu?

Répondre

0

Cela parce que le tryCatch devrait envelopper la fonction cor.test() et non le append(). En outre, vous pouvez utiliser sapply() au lieu d'une boucle for ici.

Générez des données

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) 

Et maintenant le code

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 

Maintenant, le vecteur result comprend un NA correspondant au test de corrélation entre un vecteur numérique et une série de NA.