在 R 版本 4.0.0 中导入 .txt 文件,其中数据包含在 { }

问题描述 投票:0回答:2

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

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

它旨在作为 5x3 矩阵加载,其中内部花括号定义 3 个向量,外部花括号定义矩阵。

对于单个向量,使用

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

谢谢

r matrix curly-braces
2个回答
4
投票

我认为 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")

编辑:高尔夫代码:

jsonlite::fromJSON(chartr("{}", "[]", txt))


0
投票

如果您现在出于某种原因了解结构,您可以提取数字:

gregexpr("[0-9]+", x) |>
  regmatches(x, m = _) |> 
  unlist() |>
  as.numeric() |>
  matrix(nrow = 5, byrow = FALSE)

     [,1] [,2] [,3]
[1,]    1   10    1
[2,]    2    9    3
[3,]    3    8    5
[4,]    4    7    7
[5,]    5    6    9
© www.soinside.com 2019 - 2024. All rights reserved.