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)
Was ist der schnellste Weg, dies für eine große Liste length(ls)
und / oder length(ls[[i]])
zu tun?
R
(falls dies nicht bereits der Fall ist) Rcpp
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.
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.
"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.
Und ein Benchmark:
%Vor%Tags und Links r performance rcpp