2014-12-21 143 views
15

我很抱歉问这个问题。我非常喜欢R.我知道有很多与同一个问题有关的线程。我明白,如果其中一个元素是列表,我们不能导出表格,但我没有设法解决我的问题。所以,我在R中获得了一个列表,并且我想将其导出为CSV或TXT文件。以下是错误消息当我执行这个命令write.table我得到:将列表导出为CSV或TXT文件中的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' 

这里是我的列表的第一个元素:

$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 

谢谢大家对你的帮助提前!

回答

11

所以基本上你有一个列表清单,其中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

你可以简单地将你的列表换成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.sw包装器)。对于列表的转换,您可以同时使用as.data.frame(mylist)data.frame(mylist)

为帮助制作reproducible example,您可以在数据上使用dput等功能。

21

我认为大多数直接的方式来做到这一点是使用capture.output,因此;

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

简单!

相关问题