Ich schreibe ein R-Paket, wo der R-Code mit einer Java-Anwendung spricht. Die Java-Anwendung gibt eine CSV-formatierte Zeichenfolge aus, und ich möchte, dass der R-Code die Zeichenfolge direkt lesen und in ein dat.frame konvertieren kann.Gibt es eine Möglichkeit, read.csv zum Lesen von einem Zeichenfolgenwert anstelle einer Datei in R zu verwenden?
Antwort
Ja, für textConnection()
auf Hilfe finden - der sehr mächtig Begriff in R ist, dass im Wesentlichen alle Leser (wie zB read.table()
und seine Varianten) Zugriff auf dieses Verbindung Objekt, das eine Datei oder einen Remote sein kann URL oder eine Pipe, die von einer anderen App kommt, oder ... ein Text wie in Ihrem Fall.
Der gleiche Trick ist für so genannte hier Dokumente verwendet:
> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
flim flam
1 1.2 2.20
2 77.1 3.14
>
Beachten Sie, dass dies für den Aufbau etwas ein einfache Weg ist, aber es ist auch teuer aufgrund der wiederholten Analyse der alle Daten. Es gibt andere Wege, um von Java zu R zu gelangen, aber das sollte Sie schnell voranbringen. Effizienz als nächstes kommt ...
eine 7-jährige Antwort bearbeiten: Inzwischen ist dies viel einfacher dank der text=
Argument, das zu read.csv()
und gleich hinzugefügt:
R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
flim flam
1 1.2 2.20
2 77.1 3.14
R>
Neuere R-Versionen haben einen einfacheren Mechanismus, siehe die Antwort von @Adam Bradley in diesem Thread: http://Stackoverflow.com/a/16349171/17523 –
Ja. Zum Beispiel:
string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
# V1 V2 V3
#1 this will be
#2 a data frame
Angenommen, Sie eine Datei namens tommy.csv haben (ja, einfallsreich, ich weiß ...), die den Inhalt von
col1 col2 \ n 1 1 \ n 2 hat 2 \ n 3 3
wobei jede Zeile durch ein Escapezeichen "\ n" getrennt ist.
Diese Datei kann mit Hilfe von allowEscapes
Argument in gelesen werden.
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
Es ist nicht perfekt (Spaltennamen ändern ...), aber es ist ein Anfang.
Mit dieser Funktion wird die Antwort von Dirk in eine bequeme Form gebracht. Es ist großartig, wenn man Fragen zu SO beantwortet, wo der Fragesteller die Daten gerade auf den Bildschirm geworfen hat.
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
Um es zu verwenden, kopieren Sie zuerst die Bildschirmdaten und fügen Sie sie in Ihren Texteditor ein.
foo bar Baz
1 2 a
3 4 b
Nun ist es mit text_to_table
wickeln, Zitate und irgendwelchen anderen Argumente für read.table
.
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Beachten Sie, dass in nun aktuellen Versionen von R, die Sie nicht mehr die textConnection()
benötigen, dann ist es möglich, dies zu tun einfach:
> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
State Abbreviation
1 Alabama AL
2 Alaska AK
3 Arizona AZ
4 Arkansas AR
5 California CA
Ich weiß, das ist ein bisschen spät, aber - vielleicht könnte es nützlich sein um dies als Bearbeitung der akzeptierten Antwort einzureichen, da es unwahrscheinlich ist, dass das OP jetzt die angenommene Antwort ändern wird, doch scheint dies jetzt die bessere Antwort zu sein? – obfuscation
IMHO sollte der OP die akzeptierte Antwort inakzeptabel akzeptieren und diese akzeptieren ... – Mischa
- 1. Gibt es eine Möglichkeit, stdin/out anstelle einer Datei zu einem Programm in Unix zu liefern?
- 2. Gibt es eine Möglichkeit, Datei-Metadaten mit node.js zu lesen?
- 3. Gibt es eine Möglichkeit, 32-Bit-Float anstelle von 64-Bit in R-Datenrahmen zu verwenden?
- 4. Gibt es eine Möglichkeit, csv-Daten in R einzufügen, anstatt aus der Datei zu lesen?
- 5. Gibt es eine Möglichkeit, "träge" zu lesen?
- 6. Gibt es eine Möglichkeit, eine .sbt-Datei aus einem .xml-Datei-Play-Framework zu lesen?
- 7. Gibt es eine Möglichkeit, In-Memory-Dateien in R zu lesen und zu schreiben?
- 8. Gibt es eine Möglichkeit, eine Datei in ClearCase von einem Zweig zum anderen zu verschieben?
- 9. Gibt es eine Möglichkeit, eine Datei in einer Schleife in Python mit einem Separator andere als Newline zu lesen
- 10. Schnellste Möglichkeit zum Lesen/Schreiben einer Bitmap von/in Datei?
- 11. Gibt es eine Möglichkeit, Tabulatoren anstelle von Leerzeichen zu erzwingen?
- 12. GitHub: Gibt es eine Möglichkeit, relative Links von Wiki zu einer Datei im Repo zu verwenden?
- 13. Gibt es eine Möglichkeit, HD-Daten nach EOF zu lesen?
- 14. Gibt es eine Möglichkeit, den Code eines Objekts anstelle von seinem Wert mit R zu drucken?
- 15. gibt es eine Möglichkeit, alle Formulare in einer Clojure-Datei zu lesen?
- 16. Gibt es eine Möglichkeit, eine MDB-Datei selbst zu leeren
- 17. Gibt es eine Möglichkeit zum Scrollen in einem WPF ScrollViewer?
- 18. Gibt es eine Möglichkeit, file_get_html auf einer Reihe von Webseiten in einem Skript zu verwenden?
- 19. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 20. Fortran: Gibt es eine Möglichkeit, Module bedingt zu verwenden?
- 21. Gibt es in PHP eine Möglichkeit, die Ausgabe einer PHP-Datei in eine Variable zu erfassen, ohne Ausgabepufferung zu verwenden?
- 22. Gibt es eine Möglichkeit, Binärdaten in JavaScript zu lesen?
- 23. Gibt es eine Möglichkeit, eine Datei in Subversion zu "kleben"?
- 24. Lesen Liste von URLs aus einer Datei in R
- 25. Gibt es eine Möglichkeit, eine TXT-Datei zu lesen und jede Zeile im Speicher zu speichern?
- 26. Gibt es eine Möglichkeit, lokale Variablen in Modulen zu verwenden?
- 27. Gibt es eine Möglichkeit, eine Testdatenbank in Katalysator zu verwenden?
- 28. Gibt es eine Möglichkeit, SearchView in Fragment zu verwenden?
- 29. Gibt es eine Möglichkeit, Bindungen in WPF erneut zu verwenden?
- 30. einige Zeilen in read.csv in R überspringen
Könnten Sie das rjava Paket stattdessen verwenden? –
Vielleicht könnten Sie mit allowEscapes (in read.table) herumspielen. Stellen Sie nur sicher, dass die Java-Ausgabe \ n verwendet, um Zeilen zu brechen. –
@Joshua Ich benutze rJava, um mit meinem Java-Programm zu sprechen. Ich denke, es ist effizienter, meine schwergewichtigen Java-Objekte zuerst in Strings umzuwandeln, bevor sie in R übergeben werden. –