Schnellste Möglichkeit, eine Liste in R / Rcpp zu transponieren

8

Ich habe eine Liste:

%Vor%

was ich "transponieren" möchte:

%Vor%

Ich kann dies erreichen mit:

%Vor%

Aber mit meinen echten Daten ist es sehr langsam ... (und ich muss das für viele Listen tun, von denen jede viel größer ist als das obige Beispiel)

Meine Frage:

Was ist der schnellste Weg, dies für eine große Liste length(ls) und / oder length(ls[[i]]) zu tun?

  1. in R (falls dies nicht bereits der Fall ist)
  2. mit Rcpp
andrew wong 11.05.2015, 10:05
quelle

2 Antworten

15

In der Entwicklungsversion von data.table , v1.9.5, gibt es eine Funktion transpose() , die genau das tut. Es wird in C für Geschwindigkeit implementiert.

%Vor%

Es wird auch automatisch mit NA gefüllt, wenn die Listenelemente nicht die gleiche Länge haben und automatisch zum höchsten SEXPTYPE konvertiert werden. Sie können dem Argument fill bei Bedarf einen anderen Wert zuweisen. Überprüfen Sie ?transpose .

Installationsanweisungen, um v1.9.5 hier zu erhalten.

    
Arun 11.05.2015, 10:12
quelle
5

"list" s sind R-Objekte ohne C-Äquivalent, so dass ihre Manipulation in C nur in Bezug auf umgebende Berechnungen effizienter wird, da das tatsächliche Transponieren zwischen R-Objekten hin und her erfolgen muss. Aruns transpose ist eine prägnante Annäherung an dieses Problem und kann scheinbar nicht besser werden. Ich werde nur einige andere Alternativen anbieten, nur um zu zeigen, dass die Umsetzung einer "Liste" launisch sein kann und vielleicht ein anderer Ansatz zum Erreichen des Endziels besser sein könnte.

%Vor%

Und ein Benchmark:

%Vor%     
alexis_laz 11.05.2015 12:59
quelle

Tags und Links