2016-06-24 14 views
4

der Kürze halber EDITED Zuordnung:einen Druckfehler bekommen, während Vektor data.table Spalte

Ich habe ein Paar vorbelegt data.tables mit ein paar Zehntausende von Zeilen jeder einzelnen und eine Handvoll von Spalten. Ich versuche, eine Spalte aus einer Tabelle zu aggregieren und das Ergebnis der anderen Tabelle zuzuweisen.

Das Problem ist, dass ich die folgende Fehlermeldung auf Zuweisung bin immer:

Error in SYS[[length(SYS) - 3L]][[1L]] == "knit_print.default" : 
    comparison (1) is possible only for atomic and list types 

Der Code selbst nicht abstürzt, aber die Fehlermeldung erfolgt grundsätzlich an die Stelle der Datentabelle, wenn I/Druckansicht der Rückgabewert. Oder es scheint so zu sein.

Googeln findet dafür absolut nichts außer für den Github-Sourcecode von data.table. Also habe ich es mir angeschaut und das einzige, was ähnlich ist, ist um die Zeilen 45-50ish herum und scheint die Druckausgabe während der In-Place-Zuweisung zu unterdrücken/zu verzögern. Es gibt keine andere Dokumentation, die ich über diesen Fehler finden könnte.

Ich konnte auch noch kein MRE erstellen (immer noch versuchen), wie das Zerlegen des Codes endet mit Arbeitsbeispielen, so klar ich vermisse das Ding, das es bricht. Ich vermute, wenn ich es finde, werde ich meine eigene Frage beantworten können.

Ich poste das, weil ich hoffe, dass jemand hier vielleicht weiß, was der Fehler bedeutet, was mir im Gegenzug helfen würde, das Problem in meinem Code zu lokalisieren und es entweder zu reparieren oder ein MRE für einen Fehlerbericht zu erstellen .

Stochern Ich habe festgestellt, dass Zuordnungen im Quellcode fehlschlagen (für nur eine Tabelle, keine Probleme mit der anderen), aber die Ausführung unterbrechen und kopieren die gleichen Zuordnungen in die Konsole funktioniert gut. Es scheint also kein Problem mit meiner Syntax oder meinen Daten zu sein.

UPDATE: Minimal Reproduzierbare Beispiel

Nach 3 Tagen geortet ich das Problem.

alloc_out <- function(annot = c("a", "b")) { 
    Genes <- data.table("parent" = annot, flag = NA) 
    ro <- structure(list("Genes" = Genes), class="dtu") 
    ro$Genes[, flag := TRUE] # This causes the error message 
          # when executed from source, 
          # but works in console. 
    return(ro) 
} 

R-Version: 3.2.4 in RStudio auf OSX El Capitan // data.table Version: 1.9.6

+1

Hinzufügen des Knitr-Tags, weil knit_print.default von dort kommt. – Frank

+0

Entschuldigung, ich denke du brauchst eine MRE und wahrscheinlich auch eine kürzere Beschreibung, was schief läuft. Der (zu lange) Code, den Sie hinzugefügt haben, funktioniert gut für mich, z. B. mit 'alloc_out (list (parent_id = 1, target_id = 2))'. Sobald Sie ein MRE erhalten haben, möchten Sie es vielleicht in einem Bug/Issue-Tracker für data.table oder knitr veröffentlichen, wenn es hier keine Zugkraft hat. – Frank

+1

@Frank Verwaltet, um es einzugrenzen. – cymon

Antwort

2

Wie ich vermutete, den Fehler ausfindig und die Schaffung der MRE ging Hand in Hand (und in dieser Reihenfolge).

Das Problem in meinem Code wird durch diese Linie verursacht:

ro <- structure(list("Genes" = Genes), class="dtu") 

Insbesondere durch das Klassenattribut. Aus irgendeinem Grund (das ist nicht aus der Dokumentation von strucutre() ersichtlich), bricht das Attribut es. Wenn ich die Attributzuweisung weglasse, funktioniert alles wie erwartet.

Dies erklärt nicht wirklich, warum der Fehler auf einer tieferen Ebene passiert. Was verursacht es in meinem Code?

+1

Hm, jetzt, wo ich das wieder gelesen habe, würde ich nicht erwarten, dass es so funktioniert.Vielleicht möchten Sie einen Fehler melden https://github.com/Rdatatable/data.table/wiki/Support – Frank

+0

Dank @frank. Ich werde. – cymon

+0

Fehlerbericht # 1758: https://github.com/Rdatatable/data.table/issues/1758 – cymon