Erstellen eines Datenrahmens in Rcpp

7

Ich möchte einen Datenrahmen in einer Rcpp Funktion erstellen, aber wenn ich es bekomme, ist es nicht wirklich sehen wie ein Datenrahmen aus. Ich habe versucht, Vektoren usw. zu schieben, aber es führt zu der gleichen Sache. Überlegen Sie:

%Vor%

in R:

%Vor%     
highBandWidth 25.12.2011, 19:36
quelle

4 Antworten

6

Es sieht so aus, als könnte Rcpp einen passenden data.frame zurückgeben, vorausgesetzt, Sie geben die Namen explizit an. Ich bin mir nicht sicher, wie ich das mit beliebigen Namen an Ihr Beispiel anpassen soll

%Vor%     
baptiste 25.12.2011, 22:16
quelle
12

Kurz gesagt:

  • DataFrames sind tatsächlich genau wie Listen mit der zusätzlichen Einschränkung, dass sie eine gemeinsame Länge haben müssen, so dass sie Spalte für Spalte am besten konstruiert sind.

  • Der beste Weg ist oft, nach unseren Komponententests zu suchen. Ihr inst/unitTests/runit.DataFrame.R gruppiert Tests für die Klasse DataFrame neu.

  • Sie haben auch die Funktion .push_back() in Rcpp gefunden, die wir zur Vereinfachung und Analogie hinzugefügt haben mit der STL. Wir warnen davor, dass dies nicht empfohlen wird: Aufgrund von Unterschieden in der Art, wie R-Objekte konstruiert werden, müssen wir im Wesentlichen immer vollständige Kopien machen.% Co_de% ist nicht sehr effizient .

  • Obwohl ich hier häufig antworte, bietet die .push_back einen besseren Platz für Rcpp Fragen.

Dirk Eddelbuettel 25.12.2011 22:15
quelle
6

Mit den Informationen aus der Antwort von @ baptiste ergibt sich schließlich ein wohlgeformter Datenrahmen:

> %Vor%

Ich denke, der Punkt bleibt, dass dies aufgrund von push_back (wie vorgeschlagen von @Dirk) und dem zweiten ineffizient sein könnte Sprachanruf-Auswertung Ich habe die rcpp unitTests nachgeschlagen und konnte mir noch nichts Besseres einfallen lassen. Hat jemand irgendwelche Ideen?

Aktualisierung:

Mit @ Dirks Vorschlägen (Danke!) scheint dies eine einfachere und effizientere Lösung zu sein:

%Vor%     
highBandWidth 27.12.2011 18:56
quelle
0

Ich stimme mit joran überein. Die Ausgabe einer C-Funktion, die innerhalb von R aufgerufen wird, ist eine Liste aller ihrer Argumente, sowohl "in" als auch "out", so dass jede "Spalte" des Datenrahmens im C-Funktionsaufruf als Argument dargestellt werden könnte. Sobald das Ergebnis des C-Funktionsaufrufs in R ist, besteht alles, was zu tun ist, darin, diese Listenelemente unter Verwendung der Listenindizierung zu extrahieren und ihnen die geeigneten Namen zu geben.

    
Jean-Victor Côté 25.12.2011 22:03
quelle

Tags und Links