Behebung einer Mehrfachwarnung "unbekannte Spalte"


168

Ich habe eine anhaltende mehrfache Warnung vor "unbekannter Spalte" für alle Arten von Befehlen (z. B. str (x) zum Installieren von Updates für Pakete) und bin mir nicht sicher, wie ich dies debuggen oder beheben soll.

Die Warnung "unbekannte Spalte" bezieht sich eindeutig auf eine Variable in einem tbl_df, die ich umbenannt habe, aber die Warnung wird in allen Arten von Befehlen angezeigt, die scheinbar nichts mit dem tbl_df zu tun haben (z. B. Installieren von Updates auf einem Paket, str (x), wobei x ist einfach ein Zeichenvektor).


11
Mir ist klar, dass die Frage vage ist, aber so scheint das Problem. Ich kann sogar Unsinn eingeben (z. B. Tippfehler) und die Warnungen erhalten. Ich vermute, es ist irgendwie in der IDE-Umgebung selbst persistent?
ssp3nc3r

1
Können Sie den genauen Befehl und die Ausgabe, die Sie erhalten, bitte posten?
Konvas

3
Ja, neueste Version von RStudio. Ich habe die Umgebung bereinigt, neu gestartet und sie tritt auf, wenn ich ein TBL_DF-Objekt lade. Ich habe das Problem anscheinend behoben, indem ich es in as.data.frame konvertiert, alles geschlossen und dann den Datenrahmen neu geladen habe. In Zukunft möchte ich zwei Dinge verstehen: Wie kann das Problem mit tbl_df vermieden werden und warum scheinen die Warnungen in der Umgebung weiterhin zu bestehen?
ssp3nc3r

1
Ich erhalte den gleichen Fehler. Befindet sich FACEBOOK.1eine Spalte in einem Ihrer data.frames und rufen Sie sie df$FACEBOOK.1irgendwo in Ihrem R-Skript auf? Meine bescheidene Vermutung ist, dass dies ein Fehler in dem tibblein Version 1.1 eingeführten Paket ist: blog.rstudio.org/2016/07/05/tibble-1-1 . Haben Sie tibbleexplizit geladen?
Dpprdan

5
Das passiert mir auch. Ich kann das Muster auf mehreren Computern reproduzieren, aber die Warnung wird nach einigen Befehlen scheinbar zufällig angezeigt, z. B. Bibliothek (Hmisc) oder Erstellen eines Datenrahmens mit dplyr. Die Warnungen beziehen sich auf Spalten, die ich noch nicht erstellt habe - ich mache sie später in meinem Code. Ich habe R und Rstudio mehrmals neu gestartet und es hilft nicht, den Code sauber auszuführen. Was ist das???
Nova

Antworten:


57

Dies ist ein Problem mit dem Diagnosetool in RStudio (dem Tool, das Warnungen und mögliche Fehler in Ihrem Code anzeigt). Es wurde teilweise bei diesem Commit in RStudio v1.1.103 oder höher von @ kevin-ushey behoben . Die Korrektur ist teilweise, da die Warnungen weiterhin angezeigt werden (wenn auch mit geringerer Häufigkeit).

Es stehen verschiedene Problemumgehungen zur Verfügung. Wählen Sie die gewünschte Lösung aus:

  • Deaktivieren Sie die Codediagnose für alle Dateien in Einstellungen / Code / Diagnose
  • Deaktivieren Sie alle Diagnosen für eine bestimmte Datei:

    Fügen Sie am Anfang der geöffneten Datei (en) hinzu:

    # !diagnostics off

    Speichern Sie dann die Dateien und die Warnungen sollten nicht mehr angezeigt werden.

  • Deaktivieren Sie die Diagnose für die Variablen, die die Warnung verursachen

    Fügen Sie am Anfang der geöffneten Datei (en) hinzu:

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

    Speichern Sie dann die Dateien und die Warnungen sollten nicht mehr angezeigt werden.

Die Warnungen werden angezeigt, weil das Diagnosetool in RStudio den Quellcode analysiert, um Fehler zu erkennen. Wenn es die Diagnoseprüfungen durchführt, greift es auf Spalten in Ihrer Tabelle zu, die nicht initialisiert sind, und gibt die angezeigte Warnung aus. Die Warnungen werden nicht angezeigt, weil Sie nicht verwandte Dinge ausführen. Sie werden angezeigt, wenn die RStudio-Diagnose ausgeführt wird (wenn eine Datei gespeichert und dann geändert wird, wenn Sie etwas ausführen ...).


13
Guter Anruf. Dies funktionierte für mich in RStudio 0.99, deaktivieren Sie "Diagnose für r anzeigen" unter Extras> Globale Optionen> Code> Diagnose
Chris Holbrook

8
RStudio 1.1.383 mit R 3.4.3, Problem besteht weiterhin.
MS Berends

4
Das Problem besteht weiterhin mit Version 1.1.423. Das Deaktivieren von "Show Diagnostics" funktioniert hervorragend
Adrian

2
Existiert noch v1.1.456. Seufzer.
Geotheory

3
Sill existiert RStudio v1.1.643 mit R v3.5.1 auf RStudio Server unter Ubuntu.
RFelber

49

Ich bin auf das gleiche Problem gestoßen, und obwohl ich nicht weiß, warum es auftritt, konnte ich feststellen, wann es auftritt, und so verhindern , dass es auftritt.

Das Problem scheint darin zu liegen, eine neue Spalte, die aus der Indizierung abgeleitet wurde, in einem Basis-R-Datenrahmen im Vergleich zu einem Tibble-Datenrahmen hinzuzufügen. Nehmen Sie dieses Beispiel, in dem Sie ageeinem Basis-R- Datenrahmen eine neue Spalte ( ) hinzufügen :

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

base_df$age[base_df$name == "mary"] <- 47

Das funktioniert ohne Rückmeldung. Aber wenn dasselbe mit einem Tibble gemacht wird, wird eine Warnung ausgegeben (und folglich denke ich, dass das seltsame, scheinbar nicht provozierte Problem mit mehreren Warnungen verursacht wird):

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' 

Es gibt sicherlich bessere Möglichkeiten, dies zu vermeiden, aber ich habe festgestellt, dass das erste Erstellen eines Vektors von NAs die Aufgabe erfüllt:

tibble_df$age <- NA

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

13
Meine Antwort ist eindeutig nicht die ganze Geschichte: Ich bekomme immer noch die (mehrfachen) Warnungen, und wie andere Kommentatoren anspielten, ist der frustrierende Teil die offensichtliche Willkür davon. A tbl_dfscheint notwendig zu sein, um die Warnungen zu erzeugen, aber ich bin nicht sicher, ob es ausreicht. Das heißt, ich denke, diese Warnung kann auftreten, wenn tbl_dfs in Verbindung mit Funktionen aus anderen tidyverse-Paketen (z. B. tidyr, dplyr) verwendet wird. Kleiner Preis für solch eine kritische Suite von Paketen, aber trotzdem seltsam / nervig.
Säbel

Das Erstellen eines Vektors von NAs hat für mich funktioniert! (RStudio Version 1.1.456, R Version 3.5.1)
Petzi

Manchmal möchte ich den Typ der Spalte angeben, z. B. R-Daten, und wenn ich sie ausfülle NA, werden später ausgefüllte Daten in den numerischen Typ konvertiert.
Jiāgěng

1
@ Jiāgěng as.Date(NA_character_)gibt NAmit Klasse Date.
Stibu

Tibbles sind von Natur aus restriktiver als data.frames. Es kann beabsichtigt sein, dass Sie eine Spalte nicht initiieren sollen, indem Sie ihr nur einen Teil zuweisen. Wenn dies jedoch ein Schutzmerkmal und kein Konstruktionsfehler ist, wäre ein früher einmaliger Fehler bei der Zuweisung von Tibbles sehr vorzuziehen.
Vinnief

17

Ich habe dieses Problem bei der Verwendung des "dplyr" -Pakets festgestellt.
Für diejenigen, die nach Verwendung der Funktion "group_by" in der Bibliothek "dplyr" mit diesem Problem konfrontiert sind:

Ich habe festgestellt, dass das Aufheben der Gruppierung der Variablen das Problem der unbekannten Spaltenwarnung löst. Manchmal musste ich die Aufhebung der Gruppierung mehrmals durchlaufen, bis das Problem behoben war.


4

Die Umwandlung der Klasse in data.framelöste das Problem für mich:

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"

Das Teil-Skript von @adts ​​ausgeliehen


es wirkt wie ein Zauber. Ich habe mich gefragt, ob es einen Nachteil gibt, es in einen Datenrahmen zu konvertieren und es dann wieder in Tibble zu konvertieren. Verliert es nur die Warnungen?
p130ter

1
Hat bei mir nicht funktioniert RStudio 1.1.442 wird immer nochWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax

3

Ich hatte dieses Problem beim gemeinsamen Umgang mit Tibble- und Lapply-Funktionen. Das Tibble schien Dinge als Liste im Datenrahmen zu speichern.

Ich habe es gelöst, indem ich unlist verwendet habe, bevor ich die Ergebnisse einer Lapply-Funktion zum Tibble hinzugefügt habe.


1

Ich bin auch auf dieses Problem gestoßen, außer durch ein Tibble, das mit einem Dyplyr-Block erstellt wurde. Hier ist eine geringfügige Änderung des Sabre-Codes, um zu zeigen, wie ich zu demselben Fehler gekommen bin.

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

Angenommen, ich wollte die folgenden Spalten auswählen.

best.columns = 'id'

Für mich gab folgendes die Warnung:

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

Dies funktionierte zwar wie erwartet, dplyrsollte aber meines Wissens identisch sein.

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

0

Ich erhalte diese Warnungen, wenn ich eine Spalte mit umbenenne, dplyr::renamenachdem ich sie mit dem readrPaket gelesen habe .

Der alte Name der Spalte wird im specAttribut nicht umbenannt . Wenn Sie also das specAttribut entfernen , verschwinden die Warnungen. Auch das Entfernen der Klasse "spec_tbl_df" scheint eine gute Idee zu sein.

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.