2016-04-27 14 views
1

zu verwenden, habe ich versucht, eine Datatable in meinem Shiny App, mit dem folgenden Code zu erstellen:Unable DT :: Datentabelle auf data.table :: data.table Objekt

output$table <- renderDataTable({ 
    dat 
    }) 

Dieses dat Objekt eine Daten vorhanden sind. Tabelle. Und ich habe diesen Fehler:

Warning: Error in dimnames.data.table: data.table inherits from data.frame (from v1.5) but this data.table does not. Has it been created manually (e.g. by using 'structure' rather than 'data.table') or saved to disk using a prior version of data.table? The correct class is c('data.table','data.frame').

Ist es, weil ich nicht data.table Datentabelle erstellen kann? Was kann ich tun?

+1

Was ist 'class (dat)'? – SymbolixAU

+2

und wie haben Sie 'dat' erstellt? ('DT :: datatable' arbeitet mit' data.table', ich benutze es oft) – SymbolixAU

+5

Bitte versuchen Sie, ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a) zu liefern -great-r-reprevable-example) – MrFlick

Antwort

0

Dank @DaisyLee für das Aufzeigen dieses Problems. Es scheint, dass Sie es geschafft haben, einen ziemlich obskuren und sehr alten Test auszugraben, der in Ihrem Code nicht richtig funktioniert.

I filed an issue über das Problem und schob eine Lösung.

Ihr Code sollte jetzt unter data.table Version 1.9.8+ laufen.

Sobald Sie aktualisieren, sollten Sie in der Lage sein, das Codefragment auszuführen, das Sie ursprünglich ohne Fehler ausprobiert haben, und ohne as.data.table oder setDT verwenden zu müssen. Wenn Sie interessiert sind, here's der Code, der behoben wurde.

+0

Vielen Dank für Ihre Arbeit. Wenn Sie Zeit haben, können Sie bitte mehr erklären, warum ich diesen Fehler hatte, und was ist der Unterschied zwischen der Verwendung von 'as.data.table' /' setDT' und dieser neuen Lösung? Danke nochmal! –

+0

Wenn Sie sich den [diff im Vergleich zum alten Code] anschauen (https://github.com/Rdatatable/data.table/commit/e9f1d1d908d76402d582fda475f33ea0d11435fb), werden Sie sehen, dass es einen Test gab, der einen Fehler verursachen würde, wenn ' Klasse 'Ihres Objekts war nicht _identisch_ zu' c ("data.table", "data.frame") '. Aber indem Sie zu einer "dplyr" -Funktion geschickt wurden, hatte Ihr Objekt einige andere Klassen erworben, wie Sie erwähnt haben. Das ist im Prinzip gut. Alles, was für die Funktion 'dimnames.data.table' wichtig ist, ist, dass mindestens eine Komponente von 'class'' data.frame' ist. Der neue Code spiegelt dies wider - "erbt (x," data.frame ")" – MichaelChirico

+0

Wirklich schätzen! –