Correction d’une “colonne inconnue” d’avertissement multiple

J’ai un avertissement multiple persistant de “colonne inconnue” pour tous les types de commandes (par exemple, str (x) pour installer des mises à jour sur des paquets), et je ne sais pas comment le déboguer ou le corriger.

L’avertissement “colonne inconnue” est clairement lié à une variable dans un fichier tbl_df que j’ai renommé, mais l’avertissement apparaît dans toutes sortes de commandes apparemment sans rapport avec le fichier tbl_df (par exemple, installation de mises à jour sur un package, str (x) simplement un vecteur de caractères).

J’ai rencontré le même problème et, bien que je ne sache pas pourquoi cela se produit, j’ai été capable de déterminer quand cela se produisait et de prévenir ainsi que cela se produise.

Le problème semble être lié à l’ajout d’une nouvelle colonne, issue de l’indexation, dans un bloc de données de base R par rapport à un bloc de données tibble. Prenez cet exemple, où vous ajoutez une nouvelle colonne ( age ) à un bloc de données de base R:

 base_df <- data.frame(id = c(1:3), name = c("mary", "jill","steve")) base_df$age[base_df$name == "mary"] <- 47 

Cela fonctionne sans retourner un avertissement. Mais quand on fait la même chose avec un tibble, cela lance un avertissement (et par conséquent, je pense causer le problème étrange, apparemment non provoqué, de plusieurs avertissements):

 library(tibble) tibble_df <- tibble(id = c(1:3), name = c("mary", "jill","steve")) tibble_df$age[tibble_df$name == "mary"] <- 47 Warning message: Unknown column 'age' 

Il y a sûrement de meilleurs moyens d'éviter cela, mais j'ai trouvé que créer d'abord un vecteur d' NA fait le travail:

 tibble_df$age <- NA tibble_df$age[tibble_df$name == "mary"] <- 47 

Mise à jour: ce problème a été partiellement résolu lors de cette validation dans RStudio v1.1.103 ou ultérieure par @kevin-ushey . Il apparaît toujours (mais avec moins de fréquence).

Ceci est un problème avec l’outil de diagnostic dans RStudio (l’outil qui affiche des avertissements et des erreurs possibles dans votre code).

https://support.rstudio.com/hc/en-us/community/posts/115001180488-Diagnostics-and-tibble-warning

Comme solution de contournement, vous pouvez append au début du ou des fichiers ouverts:

 # !diagnostics off 

Enregistrez ensuite les fichiers et les avertissements doivent cesser d’apparaître.

Vous pouvez également simplement désactiver les diagnostics dans Preferences / Code / Diagnostics.

Je crois que les avertissements apparaissent car l’outil de diagnostic de RStudio parsing le code source pour détecter les erreurs et lorsqu’il effectue les vérifications de diagnostic, il accède aux colonnes de votre tibble qui ne sont pas initialisées, ce qui donne l’avertissement que nous voyons. Les avertissements n’apparaissent pas car vous exécutez des tâches sans rapport, ils apparaissent lorsque les diagnostics RStudio sont exécutés (lorsqu’un fichier est enregistré, puis modifié, lorsque vous exécutez quelque chose …).

J’ai rencontré ce problème en utilisant le package “dplyr”.
Pour ceux confrontés à ce problème après avoir utilisé la fonction “group_by” dans la bibliothèque “dplyr”:

J’ai trouvé que le dissociation des variables résout le problème d’avertissement de colonne inconnu. Parfois, j’ai dû parcourir plusieurs fois le groupe jusqu’à ce que le problème soit résolu.

La conversion de la classe en data.frame résolu le problème pour moi:

 library(dplyr) df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve")) dfTbl <- df %>% group_by(id) %>% summarize (n = n()) class(dfTbl) # [1] "tbl_df" "tbl" "data.frame" dfTbl = as.data.frame(dfTbl) class(dfTbl) # [1] "data.frame" 

Emprunté le script partiel de @adts

J’ai également rencontré ce problème, sauf à travers un tibble créé à l’aide d’un bloc dyplyr. Voici une légère modification du code de sabre pour montrer comment je suis arrivé à la même erreur.

 library(dplyr) df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve")) t <- df %>% group_by(id) %>% summarize (n = n()) t str(t) t$newvar[t$id==1] <- 0 

Disons que je voulais sélectionner les colonnes suivantes

 best.columns = 'id' 

Pour moi, voici ce qui suit:

 df%>% select_(one_of(best.columns)) 

Bien que cela fonctionne comme prévu, même si, à ma connaissance, dplyr , cela devrait être identique.

 df%>% select_(.dots = best.columns)