2014-12-10 233 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