2014-12-21 4 views
15

Mi dispiace fare questa domanda. Sono molto noob con R. So che ci sono molti thread legati allo stesso problema. Ho capito che non possiamo esportare una tabella se uno dei suoi elementi è una lista ma non sono riuscito a risolvere il mio problema. Quindi, ho una lista in R e voglio esportarla in un file CSV o TXT. Ecco il messaggio di errore che ottengo quando eseguo questo comando write.table:Esportare un elenco in un file CSV o TXT 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' 

Ecco il primo elemento della mia lista:

$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 

Grazie a tutti per il vostro aiuto in anticipo!

risposta

11

Quindi, in sostanza, si dispone di un elenco di elenchi, con la mia lista che è il nome dell'elenco principale e il primo elemento è $f10010_1 che viene stampato (e che contiene altri 4 elenchi).

Penso che il modo più semplice per farlo è quello di utilizzare lapply con l'aggiunta di dataframe (supponendo che ciascuna lista all'interno di ogni elemento della lista principale (come le liste di $f10010_1) ha la stessa lunghezza):

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

È possibile che questo verrà convertito in un $f10010_1 dataframe poi fare lo stesso con ogni altro elemento e aggiungere uno sotto l'altro in 'test.csv'

È inoltre possibile digitare ?write.table sulla console per verificare quali altri argomenti è necessario passare quando scrivi e la tabella a un file CSV, ad es. se hai bisogno di nomi di righe o nomi di colonne ecc.

2

Puoi semplicemente avvolgere l'elenco come un data.frame (data.frame è in effetti un tipo speciale di elenco). Ecco un esempio:

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) 

o, in alternativa è possibile utilizzare write.csv (un wrapper write.table). Per la conversione dell'elenco, è possibile utilizzare sia as.data.frame(mylist) e data.frame(mylist).

Per facilitare la creazione di reproducible example, è possibile utilizzare funzioni come dput sui dati.

21

Penso che il modo più semplice per fare ciò sia modo semplice utilizzando capture.output;

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

Facile!