Ich denke, dass sich die Datenvorverarbeitbarkeit von R verbessert hat - dh alles, was aus der Extraktion von Daten aus der Quelle und unmittelbar vor den Analyse-Schritten resultiert wesentlich in den letzten drei Jahren (die Länge der Zeit, die ich R verwendet habe). Ich benutze Python täglich und habe in den letzten sieben Jahren oder so - seine Textverarbeitung Fähigkeiten sind hervorragend - und noch würde ich nicht zögern für einen Moment, um R für die Art von Aufgabe, die Sie erwähnen, zu verwenden.
Ein paar Vorbehalte obwohl.Erstens würde ich schlägt vor, suche sehr eng an ein paar der externen Pakete für den Satz von Aufgaben in Ihrem Q - insbesondere Hash (Python-like Schlüssel-Wert-Datenstruktur) und stringr (besteht hauptsächlich aus Umhüllungen über die weniger benutzerfreundlich Zeichenfolge Manipulationsfunktionen in der Basisbibliothek)
Sowohl stringr und hash auf CRAN verfügbar sind.
> library(hash)
> dx = hash(k1=453, k2=67, k3=913)
> dx$k1
[1] 453
> dx = hash(keys=letters[1:5], values=1:5)
> dx
<hash> containing 5 key-value pair(s).
a : 1
b : 2
c : 3
d : 4
e : 5
> dx[a]
<hash> containing 1 key-value pair(s).
a : 1
> library(stringr)
> astring = 'onetwothree456seveneight'
> ptn = '[0-9]{3,}'
> a = str_extract_all(astring, ptn)
> a
[[1]]
[2] "456"
Es scheint auch, dass es eine große Teilmenge von R Benutzer ist für die Textverarbeitung und Textanalyse umfassen einen wesentlichen Teil ihres Tag-zu-Tag der Arbeit - wie Natural Language Processing Task View von CRAN belegt (eine von etwa 20 solche informellen domänenorientierten Paketsammlungen). In dieser Task-Ansicht befindet sich das Paket tm, ein Paket für Funktionen zum Text-Mining. Eingeschlossen in tm sind optimierte Funktionen für die Verarbeitung von Aufgaben wie die in Ihrer Frage erwähnt
Darüber hinaus hat R eine exzellente Auswahl an Paketen für auf recht große Datensätze interaktiv arbeiten (zB> 1 GB) oft ohne die Notwendigkeit, eine Parallelverarbeitungsinfrastruktur aufzubauen (die aber einen Cluster ausnutzen kann, wenn er verfügbar ist). Die beeindruckendsten von diesen sind meiner Meinung nach die Pakete unter der Rubrik "The Bigmemory Project" (CRAN) von Michael Kane und John Emerson in Yale; Dieses Projekt umfasst Bigmemory, Biganalytics, Synchronicity, BigTabulate und Bigalgebra. Zusammenfassend umfassen die Techniken hinter diesen Paketen: (i) Zuordnen der Daten zu gemeinsam genutztem Speicher, was die Koordination des gemeinsamen Zugriffs durch separate gleichzeitige Prozesse zu einer einzelnen Kopie der Daten ermöglicht; (ii) Datei-backed Datenstrukturen (die ich glaube, aber ich bin nicht sicher, ist gleichbedeutend mit einer Memory-Mapped-Dateistruktur, und die Arbeit ermöglicht sehr schnellen Zugriff von der Festplatte mit Zeigern wodurch die RAM-Grenze für verfügbare Dateigröße zu vermeiden) .
Noch ein paar Funktionen und Datenstrukturen in der R-Standardbibliothek machen es einfacher, interaktiv mit Daten zu arbeiten, die sich normalen RAM-Grenzen nähern. Zum Beispiel .rdata, ein gebürtiger Binärformat, ist ungefähr so einfach wie möglich (die Befehle sind speichern und Last) zu verwenden, und es hat eine ausgezeichnete Kompression:
> library(ElemStatLearn)
> data(spam)
> format(object.size(spam), big.mark=',')
[1] "2,344,384" # a 2.34 MB data file
> save(spam, file='test.RData')
Diese Datei, ‚test. RData 'ist nur 176 KB, größer als 10-fach Komprimierung.
Es ist keine direkte Antwort auf Ihre Frage, aber sind Ihnen Dinge wie rpy2 bekannt? Es ermöglicht Ihnen, Python-Objekte in R-Objekte umzuwandeln und R-Funktionen für sie zu verwenden. So können Sie Python-Verarbeitung machen, und dann R-Verarbeitung im selben Skript, wenn auch mit einer etwas längeren Syntax. –
@Thomas Nicht ganz eine Lösung. Meine Sorge ist, dass ich auf R bleiben und so wenig externe Dinge wie möglich verwenden möchte. Vor allem, wenn ich meinen Code herausgebe, wäre es besser, wenn der Endbenutzer nur R installieren muss. –
Sets sind im Paket 'sets' verfügbar. Da Vektoren benannte Elemente haben, verhalten sie sich für die meisten Zwecke sehr ähnlich wie Dicts. (Ein data.frame mit ID- und Wertspalten funktioniert auch als Diktat.) –