Подтвердить что ты не робот

Экспортировать список в файл CSV или TXT в R

Прошу прощения за этот вопрос. Я очень люблю с R. Я знаю, что существует много потоков, связанных с одной и той же проблемой. Я понял, что мы не можем экспортировать таблицу, если один из ее элементов является списком, но мне не удалось решить мою проблему. Итак, я получил список в R, и я хочу экспортировать его в файл CSV или TXT. Вот сообщение об ошибке, которое я получаю при выполнении этой команды write.table:

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

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

Вот первый элемент моего списка:

$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

Спасибо всем за вашу помощь заранее!

4b9b3361

Ответ 1

Итак, у вас есть список списков, в котором mylist является именем основного списка, а первый элемент - $f10010_1, который распечатывается (и который содержит еще 4 списка).

Я думаю, что самый простой способ сделать это - использовать lapply с добавлением dataframe (предполагая, что каждый список внутри каждого элемента основного списка (например, списки в $f10010_1) имеют одинаковую длину)

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

Вышеуказанное преобразует $f10010_1 в фреймворк данных, затем сделает то же самое с каждым другим элементом и добавит один ниже другого в 'test.csv'

Вы также можете набрать ?write.table на консоли, чтобы проверить, какие еще аргументы вам нужно передать, когда вы пишете таблицу в файл csv, например. нужны ли имена строк или имена столбцов и т.д.

Ответ 2

Я думаю, что самый простой способ сделать это - использовать capture.output, таким образом;

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

Легко!

Ответ 3

Вы можете просто обернуть свой список как data.frame(data.frame на самом деле является особым видом списка). Вот пример:

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)

или, альтернативно, вы можете использовать write.csv(обертка вокруг write.table). Для преобразования списка вы можете использовать как as.data.frame(mylist), так и data.frame(mylist).

Чтобы помочь в создании воспроизводимого примера, вы можете использовать для своих функций такие функции, как dput.