2013-03-12 12 views
13

rufe ich die kürzlich eingeführte fread Funktion von data.table unter Verwendung von Daten-Dateien zu lesen. Wenn ich meinen Code in eine knitr (Rmd) Dokument wickeln, bemerkte ich einige seltsame Ausgang, nämlich Zeilen wie:merkwürdige Ausgabe von fread, wenn sie von knitr

## 
0% 

obwohl die verbose Möglichkeit fread auf FALSCH gesetzt wurde. Ich habe sink verwendet, um diese Ausgabe zu verbergen, aber ich möchte das genaue Problem den Paketautor (en) melden. Hier ein kleines Beispiel:

library(knitr) 

test = "```{r} 
require(data.table) 
fread('1 2 3\n') 
```" 
knit2html(text=test, output="test.html") 
browseURL("test.html") 

Was ist der 0% Ausgang?

+1

Ich kann Ihre Ausgabe nicht reproduzieren Ich habe nicht "0%". Welche Version von 'data.table' benutzt du? – agstudy

+0

Ich sehe es (data.table_1.8.8 und knitr_1.1). Sie können es auch nur mit 'kint (text = test)' sehen, was '[1]" \ n'''r \ nrequire (data.table) \ nfread (\ "1 2 3 \\ n \") \ n''' \ n \ n''' \ n ## \ r0% \ r \ n \ n''' \ n \ n''' \ n ## V1 V2 V3 \ n ## 1: 1 2 3 \ n''' \ n "'. Der interessante Teil ist, dass die '##' und '0%' enden mit '\ r', nicht' \ n'. Es sieht aus wie eine Art Fortschrittsbalken, der schnell überschrieben wird. Aber "knitr" behandelt die Zeilenumbrüche ('\ r') als Zeilenenden (' \ n') und so erhalten sie jeweils ihre eigene Zeile. –

+0

Ich benutze die neuesten Versionen von CRAN, data.table_1.8.8 und knitr_1.1 – baptiste

Antwort

15

Es ist ein% Fortschrittszähler. Für mich ist es druckt 0%, 5%, 10%, ... 95%, 100% (zum Beispiel) mit einem \r am Ende, um es auf einer Linie direkt unter dem Aufruf fread erscheinen, wenn an der Eingabeaufforderung eingegeben.

Aber wenn von Funktionen, Chargen genannt und knitr dies unerwünscht ist. Dies wurde jetzt entfernt. Von NEWS für v1.8.9 (rev 851):

  • % Fortschritt Konsole Meter entfernt worden ist. Die Ausgabe war im Batch-Modus, Protokolldateien und Berichten, die \r nicht behandeln, unbequem. Es war zu schwer zu erkennen, wo fread aus aufgerufen wird, plus, das Entfernen es bis fread ein wenig beschleunigt durch for-Schleife Code innerhalb der C Speicher (weshalb es nicht optional gemacht wurde statt). Verwenden Sie den Systemmonitor Ihres Betriebssystems, um zu bestätigen, dass fread läuft. Dank Baptiste für die Hervorhebung:
    Strange output from fread when called from knitr

einfach eine kurze Erinnerung auf Vollständigkeit. Von der Spitze der ?fread:

Diese Funktion ist noch in der Entwicklung. Zum Beispiel werden Daten als Zeichen gelesen (sie können danach umgewandelt werden unter Verwendung der ausgezeichneten fasttime Paket oder Standard-Basisfunktionen) und eingebettete Anführungszeichen („\““ und‚‘‚‘) haben Probleme. Es gibt auch andere bekannte Probleme, die nicht behoben und Funktionen noch nicht implementiert. Aber, können Sie es finden in vielen Fällen funktioniert. Bitte Probleme Datatable-Hilfe melden oder Überlauf des data.table Tag Stack.

nicht für den produktiven Einsatz noch. Nicht, weil es in dem Sinne instabil ist , dass es abstürzt oder fehlerhaft ist (Ihre Prüfung wird zeigen, ob esiststabil in Ihren Fällen oder nicht), sondern weil fredes Argumente und Verhalten in Zukunft wahrscheinlich ändern wird; das heißt, wir erwarten (hoffentlich geringe) nicht rückwärtskompatible Änderungen. Warum wurde dann zu CRAN freigegeben? Weil eine Wartungsfreigabe von CRAN Maintainers aufgefordert wurde, neue strengere Tests in R-devel zu erfüllen, und eine einige Bioconductor-Pakete von data.table abhängen und benötigt Bioconductor Pakete, um R-devel-Prüfungen zu bestehen.Es war schneller zu gehen faded in und schreibe diese Absätze, dann fade heraus.

+9

'fread' ist sehr nett (aber sollte man SO wirklich loben?), Und ich hatte wirklich keine Ahnung, wo dieses Zeug herkommt (es zeigte sich nicht außerhalb von knitr), also wollte ich sicherlich niemanden verärgern. Ich wollte nur herausfinden, was die Ursache war, den Autor des entsprechenden Pakets direkt zu kontaktieren. – baptiste

+9

Mussten Sie in Ihrer Antwort so hart sein? Ich verstehe die Kritik an etwas, das du geschrieben hast, aber ich weiß nicht, dass das Pech gegen den armen Kerl hier hilft. Ich habe das gemacht, als jemand nach einem meiner Open-Source-Projekte gegangen ist und es nie gut ausgegangen ist. –

+5

für die Aufzeichnung, ich werde diese Antwort nicht ablehnen, sondern es akzeptieren. Ich habe auch Open-Source-Projekte, verbringe unzählige Stunden damit, Menschen zu helfen, wir wissen alle, wie es ist. – baptiste

11

Es ist kein Problem zu berichten.

Wie Matthew Dowle erwähnt, ist dies ein Fortschritt Zähler von fread

Sie results = 'hide' diese Ergebnisse zu vermeiden einstellen

library(knitr) 

test = "```{r, results = 'hide'} 
require(data.table) 
fread('1 2 3\n') 
```" 
knit2html(text=test, output="test.html") 
browseURL("test.html") 

Blick enthalten sind, keine Fortschrittsbalken.


Auf praktischer Ebene halte ich es für sinnvoll wäre results = 'hide' oder sogar include = FALSE für einen Schritt wie diese zu haben.

Sie nicht diese Art von Lektüre in Schritt wiederholen möchten, praktisch, Sie immer nur wollen einmal die Daten lesen, dann würden Sie es serialisiert (save verwenden, saveRDS oder ähnliches), so dass Sie das nächste verwenden könnte Zeit (die wäre schneller).


bearbeiten im Lichte des Kommentars

Ich würde die Verarbeitung aufgeteilt in mehr kleineren Stücken. Sie könnten dann nicht das Lesen in Klumpen enthalten, aber enthalten eine Dummy-Version, die nicht ausgewertet wird (so Sie den Code sehen können, aber nicht die Ergebnisse enthalten)

```{r libraries} 
require(data.table) 
``` 

```{r loaddata, include = FALSE} 
DT <- fread('yourfile') 
``` 

```{r loaddummy, ref.label = 'loaddata', eval = FALSE, echo = TRUE} 
``` 

```{r dostuff} 
# doing other stuff 
``` 
+0

danke, aber da ich andere Ergebnisse aus dem gleichen Stück sehen möchte, die mich mit der Problemumgehung, die ich zuvor gefunden habe (umleiten der Fread-Zeile zu sinken). – baptiste

+0

@baptiste. Ich würde den Brocken aufteilen. Sie möchten die Datei nicht wiederholt lesen, also haben Sie sie als separaten Chunk, der zwischengespeichert wird, also nur einmal. – mnel

+0

danke @ mnel. Die Frage war mehr, über den zugrunde liegenden Grund herauszufinden, um es zu melden; Ich bin vertraut mit den Optionen in Knitr, um das Problem zu überwinden, Cache zu verwenden, etc. – baptiste

0

Es gibt einen Parameter showProgress in fread genannt ist, wenn Sie setzen es auf FALSE, dann sehen Sie nicht die Fortschrittsausgabe. (Es ist nützlich, um r Abschrift zu machen.)

Verwandte Themen