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
提前感谢大家的帮助!
答案 0 :(得分:32)
我认为大多数直截了当的方法是使用capture.output
,因此;
capture.output(summary(mylist), file = "My New File.txt")
容易!
答案 1 :(得分:16)
所以基本上你有一个列表列表,其中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 :(得分: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)
。
为了帮助制作reproducible example,您可以在数据上使用dput
等功能。
答案 3 :(得分:2)
cat(capture.output(print(my.list), file="test.txt"))
是唯一对我有用的东西。这将输出文本文件中的列表列表
答案 4 :(得分:2)
使用perl -e '$SIG{PIPE} = sub { print STDERR "XXX\n"; }; sleep(1); print "foo\n";' | echo -n
函数:
sink
答案 5 :(得分:2)
我使用CPAN YAML package将列表导出为YAML格式。
l <- list(a="1", b=1, c=list(a="1", b=1))
yaml::write_yaml(l, "list.yaml")
YAML的好处,它是一种人类可读的文本格式,因此易于读取/共享/导入/等
$ cat list.yaml
a: '1'
b: 1.0
c:
a: '1'
b: 1.0
答案 6 :(得分:0)
您可以编写For循环以从列表中单独存储数据帧:
allocation = list()
for(i in 1:length(allocation)){
write.csv(data.frame(allocation[[i]]), file = paste0(path, names(allocation)[i], '.csv'))
}
答案 7 :(得分:0)
在这里签出,对我来说效果很好,输出大小没有限制,没有遗漏的元素,甚至超过了1000
答案 8 :(得分:0)
这是将列表写入 csv 或其他格式文件的一种方法:
输入列表:
test <- list(A=data.frame(m=1:3,n=letters[1:3]), B=1:5)
将列表导出到文件:
library(data.table)
outputfile <- "test.csv" #output file name
sep <- "," #define the separator (related to format of the output file)
for(nam in names(test)){
fwrite(list(nam), file=outputfile, sep=sep, append=T) #write names of the list elements
ele <- test[[nam]]
if(is.list(ele)) fwrite(ele, file=outputfile, sep=sep, append=T, col.names=T) else fwrite(data.frame(matrix(ele, nrow=1)), file=outputfile, append=T) #write elements of the list
fwrite(list(NA), file=outputfile, append=T) #add an empty row to separate elements
}
输出看起来像(由于级别限制,我不能在这里放图片):
A
m,n
1,a
2,b
3,c
B
1,2,3,4,5