wake-up-neo.net

Behebung einer mehrfachen Warnung "unbekannte Spalte"

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). 

120
ssp3nc3r

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 ...).

40
zeehio

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 NAs die Aufgabe erfüllt:

tibble_df$age <- NA

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

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. 

14
Varun

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

4
stok

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
1
adts

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.

0
michael joseph

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)
0
Jelena-bioinf