2014-12-10 287 views
3

This post提出了一种将列表写入文件的方法。R:将列表导出并导入到.txt文件

lapply(mylist, write, "test.txt", append=TRUE, ncolumns=1000) 

这个美特殊的问题是列表(结构为子部分和子部件中的名称)的信息的一部分消失,因此这是非常复杂的(或不可能的,如果我们失去了额外信息)从文件重新创建原始列表。

什么是导出和导入(不会导致任何修改,包括名称)列表的最佳解决方案?

+4

''dput'或dump''save'将所有写的R对象到外部文件。 'save'将会给出一个二进制格式,而另外两个文本表示。 – thelatemail 2014-12-10 23:35:55

+1

为什么不使用'saveRDS'什么的? – rawr 2014-12-10 23:36:09

+0

如果你确切地想要在控制台输出中看到什么,那么:cat(capture.output(print(my.list),file =“test.txt”)'尽管我认为dput策略会更好,因为它可以是'source()'-ed – 2014-12-10 23:45:04

回答

0

您可以保存使用这些命令的列表(假设有含一个点没有元素名称)

l1 <- list(a = 1, b = list(c = 1, d = 2)) 
vectorElements <- unlist(l1) 
vectorPaths <- names(vectorElements) 
vectorRows <- paste(vectorPaths, vectorElements) 
write.table(vectorRows, "vectorRows.txt", row.names = FALSE, col.names = FALSE, quote = FALSE) 

文件的每一行对应的元素以这种格式

node1.node2.node3 leaf 

然后,您将可以重新构建列表结构。

+0

This将无法可靠地工作:列表名称中可能有'.',因此您不能保证重新构建结构会得到相同的列表。实际上,我认为它们基本上可以具有任何字符,例如'list('a:2^3'= 42)'有效。 – naught101 2017-02-28 07:12:19

0

你可以只使用YAML库:

R> library(yaml) 
R> l1 <- list('1'=2, se7en=list('som:eth|ng~horr1ßl€'=42)) 
R> l1 
$`1` 
[1] 2 

$se7en 
$se7en$`som:eth|ng~horr1ßl€` 
[1] 42 
R> cat(as.yaml(l1), file='blah.txt') 
R> l2 <- yaml.load_file('blah.txt') 
R> l2 
$`1` 
[1] 2 

$se7en 
$se7en$`som:eth|ng~horr1ßl€` 
[1] 42