2014-12-21 5 views
15

Entschuldigung, diese Frage zu stellen. Ich bin sehr noob mit R. Ich weiß, dass es viele Threads gibt, die zu dem gleichen Problem gehören. Ich habe verstanden, dass wir keine Tabelle exportieren können, wenn eines ihrer Elemente eine Liste ist, aber ich habe es nicht geschafft, mein Problem zu lösen. Also, ich habe eine Liste in R und ich möchte es in eine CSV- oder TXT-Datei exportieren. Hier ist die Fehlermeldung, die ich erhalte, wenn ich diesen write.table Befehl ausführen:Exportieren Sie eine Liste in eine CSV- oder TXT-Datei in R

write.table(mylist,"test.txt",sep=";") 

Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, : 
unimplemented type 'list' in 'EncodeElement' 

Hier ist das erste Element meiner Liste:

$f10010_1 
$f10010_1$mots 
[1] X16    ESPRESSO   TDISC    TASSIMO   
[5] CARTE    NOIRE    A     LAVAZZA   
[9] MALONGO   MIO    MODO    123    
[13] CAPSULES   DOSES    78G    LONG    
[17] SPRESSO   CAFE    120G    CLASSIC   
[21] 104G    128G    AROMATIQUE  INTENSE   
[25] 112G    156G    520G    5X16    
[29] PROMO    TRIPACK   X24    126G    
[33] 16    4X16    APPASSIONATAMENTE APPASSIONATEMENTE 
[37] BRESIL   CAPSUL   COLOMBIE   CORSE    
[41] CREMOSAMENTE  DELICATI   DELIZIOSAMENTE DIVINAMENTE  
[45] DOLCEMENTE  EQI    GRAND    GRANDE   
[49] GT    GUATEMALA   HAITI    INTENSAMENTE  
[53] ITALIAN   MAGICAMENTE  MERE    MOKA78G   
[57] PETITS   PRODUCT   PURSMATIN   RESERVE   
[61] RISTRETO   SOAVEMENTE  STYLE    X36    
64 Levels: 104G 112G 120G 123 126G 128G 156G 16 4X16 520G 5X16 78G ... X36 

$f10010_1$nblabel 
[1] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 
[27] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 
[53] 32 32 32 32 32 32 32 32 32 32 32 32 
Levels: 32 

$f10010_1$Freq 
[1] 18 16 16 15 14 14 9 9 9 9 9 8 8 8 7 7 7 6 5 5 3 3 3 3 2 2 
[27] 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
[53] 1 1 1 1 1 1 1 1 1 1 1 1 

$f10010_1$pct 
[1] 0.56250 0.50000 0.50000 0.46875 0.43750 0.43750 0.28125 0.28125 0.28125 
[10] 0.28125 0.28125 0.25000 0.25000 0.25000 0.21875 0.21875 0.21875 0.18750 
[19] 0.15625 0.15625 0.09375 0.09375 0.09375 0.09375 0.06250 0.06250 0.06250 
[28] 0.06250 0.06250 0.06250 0.06250 0.03125 0.03125 0.03125 0.03125 0.03125 
[37] 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 
[46] 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 
[55] 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 
[64] 0.03125 

Vielen Dank für Ihre Hilfe im Voraus!

Antwort

11

Also im Wesentlichen haben Sie eine Liste von Listen, mit Mylist ist der Name der Hauptliste und das erste Element ist $f10010_1, die ausgedruckt wird (und die 4 weitere Listen enthält).

Ich denke, der einfachste Weg, dies zu tun, ist lapply mit dem Zusatz von dataframe zu verwenden (innerhalb jeden Elements der Hauptliste, dass jede Liste unter der Annahme (wie die Listen in $f10010_1) die gleiche Länge):

lapply(mylist, function(x) write.table(data.frame(x), 'test.csv' , append= T, sep=',')) 

die oben wird $f10010_1 in einen Datenrahmen umwandeln dann mit jedem anderen Element das gleiche tun und untereinander in ‚test.csv‘ anhängen

Sie auch ?write.table auf der Konsole eingeben können, um zu überprüfen, was Sie andere Argumente brauchen übergeben, wenn Sie schreiben e die Tabelle in eine CSV-Datei z. ob Sie Zeilennamen oder Spaltennamen etc. benötigen

2

Sie können Ihre Liste einfach als data.frame umschließen (data.frame ist in der Tat eine spezielle Art von Liste). Hier ein Beispiel:

mylist = list() 
mylist[["a"]] = 1:10 
mylist[["b"]] = letters[1:10] 
write.table(as.data.frame(mylist),file="mylist.csv", quote=F,sep=",",row.names=F) 

oder alternativ können Sie verwenden write.csv (ein Wrapper um write.table). Für die Umrechnung der Liste können Sie sowohl as.data.frame(mylist) als auch data.frame(mylist) verwenden.

Um bei der Erstellung eines reproducible example zu helfen, können Sie Funktionen wie dput auf Ihre Daten verwenden.

21

Ich denke, die meisten einfachen Weg, dies zu tun ist capture.output, also;

capture.output(summary(mylist), file = "My New File.txt") 

Einfach!

Verwandte Themen