web-dev-qa-db-fra.com

Correction d'un avertissement multiple "colonne inconnue"

J'ai un avertissement multiple persistant de "colonne inconnue" pour tous les types de commandes (par exemple, str (x) pour l'installation de mises à jour sur des packages), et je ne sais pas comment le déboguer ou le corriger. 

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

120
ssp3nc3r

Mise à jour: Ce problème a été partiellement résolu à ce commit dans RStudio version 1.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 Diagnostics dans RStudio (l'outil qui affiche des avertissements et des erreurs éventuelles dans votre code).

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

Pour contourner le problème, vous pouvez ajouter au début du ou des fichiers ouverts:

# !diagnostics off

Puis enregistrez les fichiers et les avertissements devraient cesser d’apparaître.

Vous pouvez également simplement désactiver les diagnostics dans Préférences/Code/Diagnostics.

Je pense que les avertissements apparaissent car l’outil de diagnostic de RStudio analyse le code source pour détecter les erreurs et, lorsqu’il effectue le contrôle diagnostique, il accède aux colonnes de votre tibble qui ne sont pas initialisées, donnant ainsi l’avertissement que nous voyons. Les avertissements n'apparaissent pas car vous exécutez des tâches indépendantes, ils apparaissent lorsque les diagnostics RStudio sont exécutés (lorsqu'un fichier est enregistré, puis modifié, lorsque vous exécutez quelque chose ...).

40
zeehio

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

Le problème semble être d'ajouter une nouvelle colonne, dérivée de l'indexation, dans un cadre de données de base R par rapport à un cadre de données de tibble. Prenez cet exemple, où vous ajoutez une nouvelle colonne (age) à un cadre 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 d'avertissement. Mais quand on fait la même chose avec un tibble, cela jette un avertissement (et par conséquent, je pense, ce qui cause le problème étrange, apparemment non provoqué, d'avertissement multiple):

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 existe sûrement de meilleurs moyens d’éviter cela, mais j’ai constaté que créer un vecteur de NAs remplit au préalable les tâches suivantes:

tibble_df$age <- NA

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

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

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

14
Varun

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

4
stok

J'ai rencontré ce problème aussi, sauf via un tibble créé avec 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
1
adts

J'ai eu ce problème quand on traite des fonctions tibble et lapply ensemble. Le tibble semblait enregistrer les choses sous forme de liste à l'intérieur du cadre de données.

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

0
michael joseph

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, même si, à ma connaissance, dplyr, cela devrait être identique. 

df%>% select_(.dots = best.columns)
0
Jelena-bioinf