【问题标题】:Importing .txt file in R version 4.0.0 where data is enclosed in { }在 R 版本 4.0.0 中导入 .txt 文件,其中数据包含在 {}
【发布时间】:2020-08-28 17:15:48
【问题描述】:

我有一个 .txt,其中数据以下列格式存储:

{{1, 2, 3, 4, 5}, {10, 9, 8, 7, 6}, {1, 3, 5, 7, 9}}

它被加载为一个 5x3 矩阵,其中内大括号定义 3 个向量,外大括号定义矩阵。

对于单个向量,使用scan() 函数将文本加载为字符向量然后使用substr() 删除大括号很简单,但似乎必须有一个包或基本函数读取带有这种表示法的向量和矩阵。很遗憾,经过几个小时的搜索,我无法找到有关此主题的任何内容。

谢谢

【问题讨论】:

  • 你确定不是 JSON 吗?那些内括号也是卷曲的吗?
  • 您好,它来自纯文本 (.txt) 文件,而不是 JSON 文件...内外大括号都是花括号。
  • JSON 文件是文本文件 - 扩展名不是 JSON 并不意味着它不是 JSON 文件。

标签: r matrix curly-braces


【解决方案1】:

我认为 AllanCameron 的评论是一个很好的提示:它与 JSON 非常接近,您可以这样对待(稍加按摩):

txt <- "{{1, 2, 3, 4, 5}, {10, 9, 8, 7, 6}, {1, 3, 5, 7, 9}}"
jsonlite::fromJSON(gsub("\\}", "]", gsub("\\{", "[", txt)))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]   10    9    8    7    6
# [3,]    1    3    5    7    9

要对文件执行此操作,您必须首先读取整个内容,使用

txt <- paste(readLines(txtfile), collapse = "\n")

【讨论】:

  • 这肯定比从头开始解析要好。当然,我们不知道是否还有其他结构(例如树或键值对)无法处理,但我认为这与给定示例一样好。
  • 我希望(期待?)OP 会返回错误,因为我们不知道该假设是否成立。如果我们不尝试,就无法知道异常:-)
  • 布伦丹,不,它不会那样工作。如果您阅读了我的回答,您会发现我们必须在传递给 jsonlite::fromJSON 之前更改文件的内容,如果您从文本文件直接跳转到 fromJSON,则不会发生这种情况。
  • 非常感谢各位的指导,非常感谢。因此,如果我使用readLines()) 读取文件然后使用jsonlite::fromJSON,它确实会读取我的文件,但生成的矩阵是3x5 而不是5x3...使用t() 来纠正问题很简单,但是。
  • 奇怪的是,jsonlite::toJSON 提供了执行 matrix="columnmajor" 的选项,readJSON 没有(不一致的 API)。您的t() 解决方案是迄今为止最好的。
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2020-04-25
  • 2019-07-15
相关资源
最近更新 更多