【问题标题】:R: Export and import a list to .txt fileR:将列表导出和导入到 .txt 文件
【发布时间】:2015-02-09 08:15:24
【问题描述】:

This post 建议一种将列表写入文件的方法。

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

这种技术的问题是列表的部分信息(子部分的结构和子部分的名称)消失了,因此重新创建原始信息非常复杂(或者如果我们丢失了额外的信息则不可能)从文件中列出。

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

【问题讨论】:

  • dput dumpsave 都会将 R 对象写入外部文件。 save 将给出二进制格式,而其他两种文本表示形式。
  • 为什么不用?saveRDS什么的?
  • 如果您想要在控制台输出中看到的内容,那么:cat(capture.output(print(my.list), file="test.txt") 虽然我认为 dput 策略会更好,因为它可以是source()-ed
  • @thelatemail 我不知道这些功能,它们正是我需要的。我最终使用了dputdget。你能把你的评论变成答案吗?谢谢。

标签: r list export-to-csv


【解决方案1】:

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

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

然后,您将能够重新构建列表结构。

【讨论】:

  • 这不会可靠地工作:列表名称可以有 . . 在其中,因此您不能保证重新构建结构会产生相同的列表。事实上,我认为他们基本上可以有任何角色,例如。 list('a:2^ 3' = 42) 工作。
  • 您将如何从 .t​​xt 中重新导入列表?
【解决方案2】:

您可以只使用 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

【讨论】:

    【解决方案3】:

    我使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      相关资源
      最近更新 更多