Correction d'un avertissement multiple "colonne inconnue"

172

J'ai un avertissement multiple persistant de "colonne inconnue" pour tous les types de commandes (par exemple, str (x) pour installer les mises à jour sur les paquets), et je ne sais pas comment déboguer ceci ou le réparer.

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

ssp3nc3r
la source
11
Je me rends compte que la question est vague, mais le problème le semble aussi. Je peux même taper un non-sens (par exemple, une faute de frappe) et recevoir les avertissements. Je suppose que c'est persistant dans l'environnement IDE lui-même, d'une manière ou d'une autre?
ssp3nc3r
1
Pouvez-vous poster la commande exacte et le résultat que vous obtenez s'il vous plaît?
konvas
3
Oui, dernière version de RStudio. J'ai nettoyé l'environnement, redémarré et cela commence à se produire lorsque je charge un objet TBL_DF. Il semble que j'ai résolu le problème en le convertissant en as.data.frame, en fermant tout, puis en rechargeant la trame de données. À l'avenir, j'aimerais comprendre deux choses: comment éviter le problème en utilisant tbl_df et pourquoi les avertissements semblent persister dans l'environnement.
ssp3nc3r
1
Je reçois la même erreur. Une FACEBOOK.1colonne est-elle dans l'un de vos data.frames et l'appelez-vous df$FACEBOOK.1quelque part dans votre script R? Mon humble avis est qu'il s'agit d'une erreur dans le tibblepackage introduit dans la v1.1: blog.rstudio.org/2016/07/05/tibble-1-1 . Avez-vous tibbleexplicitement chargé?
dpprdan
5
Cela m’arrive aussi. Je peux reproduire le modèle sur plusieurs ordinateurs, mais l'avertissement apparaît de façon aléatoire après certaines commandes, par exemple bibliothèque (Hmisc) ou création d'un dataframe avec dplyr. Les avertissements font référence à des colonnes que je n'ai pas encore créées - je les crée plus tard dans mon code. J'ai redémarré R et Rstudio plusieurs fois et exécuter le code clean n'aide pas. Qu'est-ce que c'est???
Nova le

Réponses:

58

Il s'agit d'un problème avec l'outil de diagnostic de RStudio (l'outil qui affiche les avertissements et les erreurs possibles dans votre code). Il a été partiellement corrigé à ce commit dans RStudio v1.1.103 ou version ultérieure par @ kevin-ushey . Le correctif est partiel, car les avertissements apparaissent toujours (mais avec moins de fréquence). Ce problème a été signalé avec un exemple reproductible sur https://github.com/rstudio/rstudio/issues/7372 et a été corrigé sur la requête d'extraction RStudio v1.4 (à publier)

Il existe plusieurs solutions de contournement disponibles, choisissez la solution que vous préférez:

  • Désactivez les diagnostics de code pour tous les fichiers dans Préférences / Code / Diagnostics

  • Désactivez tous les diagnostics pour un fichier spécifique:

    Ajoutez au début du (des) fichier (s) ouvert (s):

     # !diagnostics off

    Ensuite, enregistrez les fichiers et les avertissements devraient cesser d'apparaître.

  • Désactivez les diagnostics pour les variables à l'origine de l'avertissement

    Ajoutez au début du (des) fichier (s) ouvert (s):

     # !diagnostics suppress=<comma-separated list of variables>

    Ensuite, enregistrez les fichiers et les avertissements devraient cesser d'apparaître.

Les avertissements apparaissent car l'outil de diagnostic de RStudio analyse 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, donnant l'avertissement que nous voyons. Les avertissements n'apparaissent pas parce que vous exécutez des choses 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 ...).

zeehio
la source
13
bon appel. Cela a fonctionné pour moi dans RStudio 0.99, décochez 'afficher les diagnostics pour r' sous Outils> Options globales> Code> Diagnostics
Chris Holbrook
8
RStudio 1.1.383 avec R 3.4.3, le problème existe toujours.
MS Berends
4
Le problème existe toujours avec la version 1.1.423. « diagnostic show » décochant fonctionne très bien
Adrian
2
Existe toujours la v1.1.456. Soupir.
geotheory
3
Sill existe RStudio v1.1.643 avec R v3.5.1 sur RStudio Server sur Ubuntu.
RFelber
49

J'ai rencontré le même problème, et bien que je ne sache pas pourquoi il se produit, j'ai pu déterminer quand cela se produit, et ainsi l'empêcher de se produire.

Le problème semble être l'ajout d'une nouvelle colonne, dérivée de l'indexation, dans une trame de données de base R par rapport à une trame 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 renvoyer un avertissement. Mais lorsque la même chose est faite avec un tibble, cela lance un avertissement (et par conséquent, je pense que cela cause le problème d'avertissement multiple étrange, apparemment non provoqué):

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 meilleures façons d'éviter cela, mais j'ai trouvé que créer d'abord un vecteur de NAs fait l'affaire:

tibble_df$age <- NA

tibble_df$age[tibble_df$name == "mary"] <- 47
sabre
la source
13
Ma réponse n'est clairement pas toute l'histoire: je reçois toujours les (multiples) avertissements, et comme d'autres commentateurs y ont fait allusion, la partie frustrante est son arbitraire apparent . Un tbl_dfsemble être nécessaire pour produire les avertissements, mais je ne suis pas sûr que ce soit suffisant. Autrement dit, je pense que cet avertissement peut apparaître lorsque tbl_dfs est utilisé en conjonction avec des fonctions d'autres packages tidyverse (par exemple, tidyr, dplyr). Petit prix à payer pour une suite aussi critique de paquets, mais néanmoins étrange / ennuyeux.
sabre du
Créer un vecteur de NAs a fonctionné pour moi! (RStudio Version 1.1.456, R version 3.5.1)
petzi
Parfois, je veux spécifier le type de colonne, par exemple R Dates, et si je remplis NA, les dates qui sont remplies plus tard seront converties en type numérique.
Jiāgěng
1
@ Jiāgěng as.Date(NA_character_)donne NAavec classe Date.
Stibu le
Les Tibbles sont par conception plus restrictifs que les data.frames. Cela peut être par conception, que vous n'êtes pas censé lancer une colonne en lui affectant seulement une partie. Cependant, s'il s'agit d'une fonction de protection et non d'une erreur de conception, alors une erreur ponctuelle précoce dans l'attribution de tibble serait de loin préférable.
vinnief le
17

J'ai rencontré ce problème lors de l'utilisation du package "dplyr".
Pour ceux qui font face à ce problème après avoir utilisé la fonction "group_by" dans la bibliothèque "dplyr":

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

Varun
la source
5

La conversion de la classe en a data.frameré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"

J'ai emprunté le script partiel à @adts

stok
la source
il fonctionne comme un charme. Je me demandais s'il y avait un inconvénient à le convertir en une trame de données, puis à le reconvertir en tibble. Est-ce seulement les avertissements qu'il perd?
p130ter
1
N'a pas fonctionné pour moi RStudio 1.1.442 toujours en train d'obtenirWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax
3

J'ai eu ce problème en traitant ensemble les fonctions tibble et lapply. Le tibble semblait enregistrer les choses sous forme de liste à l'intérieur du dataframe.

Je l'ai résolu en utilisant unlist avant d'ajouter les résultats d'une fonction lapply au tibble.

michael joseph
la source
1

J'ai rencontré ce problème aussi, 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
annonces
la source
1

Disons que je voulais sélectionner la (les) colonne (s) suivante (s)

best.columns = 'id'

Pour moi, ce qui suit a donné l'avertissement:

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

Bien que cela ait fonctionné comme prévu, bien que, pour autant que je sache dplyr, cela devrait être identique.

df%>% select_(.dots = best.columns)
JelenaČuklina
la source
0

J'obtiens ces avertissements lorsque je renomme une colonne en utilisant dplyr::renameaprès l'avoir lu en utilisant le readrpackage.

L'ancien nom de la colonne n'est pas renommé dans l' specattribut. Donc, la suppression de l' specattribut fait disparaître les avertissements. Supprimer également la classe "spec_tbl_df" semble être une bonne idée.

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
alko989
la source