Ich habe eine permanente mehrfache Warnung vor "unbekannter Spalte" für alle Arten von Befehlen (z. B. str (x) zum Installieren von Aktualisierungen auf Paketen) und bin mir nicht sicher, wie dies zu debuggen oder zu beheben ist.
Die Warnung "unbekannte Spalte" bezieht sich eindeutig auf eine Variable in einem Tbl_df, die ich umbenannt habe. Die Warnung wird jedoch in allen Arten von Befehlen angezeigt, die scheinbar nicht mit dem Tbl_df zusammenhängen (z. B. Installieren von Aktualisierungen auf einem Paket, str (x), wo x ist einfach ein Zeichenvektor).
Update: Dieses Problem wurde teilweise von commit in RStudio v1.1.103 oder höher durch @ kevin-ushey behoben. Es erscheint immer noch (wenn auch mit weniger Häufigkeit).
Dies ist ein Problem mit dem Diagnosetool in RStudio (das Tool, das Warnungen und mögliche Fehler in Ihrem Code anzeigt).
https://support.rstudio.com/hc/de-de/community/posts/115001180488-Diagnostics-and-tibble-warning
Als Problemumgehung können Sie am Anfang der geöffneten Datei (en) Folgendes hinzufügen:
# !diagnostics off
Speichern Sie dann die Dateien und die Warnungen sollten aufhören.
Sie können die Diagnose auch einfach in Einstellungen/Code/Diagnose deaktivieren.
Ich glaube, dass die Warnungen angezeigt werden, weil das Diagnosetool in RStudio den Quellcode zur Erkennung von Fehlern analysiert. Wenn die Diagnoseprüfungen durchgeführt werden, greift es auf Spalten in Ihrem Tibet-Speicher zu, die nicht initialisiert sind. Die Warnungen werden nicht angezeigt, weil Sie nicht zusammenhängende 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 ...).
Ich bin auf dasselbe Problem gestoßen, und obwohl ich nicht weiß , warum es auftritt, konnte ich feststellen, wann ) tritt auf und verhindert so, dass es passiert.
Das Problem scheint darin zu liegen, dass eine neue, aus der Indizierung abgeleitete Spalte in einem Basis-R-Datenrahmen im Vergleich zu einem tibble-Datenrahmen hinzugefügt wird. Nehmen Sie das folgende Beispiel, in dem Sie eine neue Spalte (age
) zu einem Basis-R-Datenrahmen 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 eine Warnung zurückzugeben. Aber wenn dasselbe mit einem tibble gemacht wird, wirft es eine Warnung aus (und folglich, denke ich, verursacht es das seltsame, scheinbar nicht provozierte, mehrfache Warnproblem):
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 erstmalige Erstellen eines Vektors von NA
s die Aufgabe erfüllt:
tibble_df$age <- NA
tibble_df$age[tibble_df$name == "mary"] <- 47
Bei der Verwendung des Pakets "dplyr" ist dieses Problem aufgetreten.
Für diejenigen, die dieses Problem nach der Verwendung der Funktion "group_by" in der Bibliothek "dplyr" haben:
Ich habe festgestellt, dass das Aufheben der Gruppierung der Variablen das Warnproblem der unbekannten Spalte löst. Manchmal musste ich die Gruppierung mehrmals durchlaufen, bis das Problem gelöst ist.
Das Konvertieren der Klasse in data.frame
hat das Problem für mich gelöst:
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 teilweise Skript von @adts entlehnt
Ich bin auch auf dieses Problem gestoßen, außer durch ein mit einem Dyplyr-Block erstelltes Tibble. Hier ist eine kleine Änderung des sabre-Codes, um zu zeigen, wie ich zu demselben Fehler kam.
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
Ich hatte dieses Problem, als ich mit tibble und lapply zusammen gearbeitet habe. Die Tabelle schien Dinge als Liste innerhalb des Datenrahmens zu speichern.
Ich habe es gelöst, indem ich Unlist verwendet habe, bevor ich die Ergebnisse einer Lapply-Funktion in die Tabelle aufgenommen habe.
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, obwohl meines Wissens dplyr
identisch sein sollte.
df%>% select_(.dots = best.columns)