【发布时间】:2020-11-16 17:26:59
【问题描述】:
我们有一个带大括号的字符串来表示嵌套列表:
x <- "{{1,2,3,4},{1,2,3,4,{Axe,Bat,Cat,Donkey}},{1,2,3,4}}"
我们如何将其转换为嵌套列表R对象?
到目前为止,我有以下解决方案,它并不理想。想法是将其转换为有效的 JSON 格式,然后使用jsonlite::fromJSON。我想跳过/改进引用步骤,以便读取的数字是数字。是的,我可以遍历嵌套列表并将"numbers" 转换为数字,但我想避免。
也欢迎任何其他非 JSON 解决方案。
library(jsonlite)
# translate brackets to JSON square brackets
x <- chartr("{}", "[]", x)
# wrap in quotes
x <- gsub("(\\w+)", '"\\1"', x)
# finally read as JSON
fromJSON(x)
# [[1]]
# [1] "1" "2" "3" "4"
#
# [[2]]
# [[2]][[1]]
# [1] "1"
#
# [[2]][[2]]
# [1] "2"
#
# [[2]][[3]]
# [1] "3"
#
# [[2]][[4]]
# [1] "4"
#
# [[2]][[5]]
# [1] "Axe" "Bat" "Cat" "Donkey"
#
#
# [[3]]
# [1] "1" "2" "3" "4"
【问题讨论】:
-
你不能用
[A-Z]代替w做一个gsub吗? (我不掌握正则表达式) -
@StéphaneLaurent 同样在这里,不是正则表达式大师,好的,这比我想象的要简单,随时添加为答案。
-
@StéphaneLaurent 哦,不,抱歉,输入不是单个字母。这只是一个例子,它们可以不止一个字母。
-
我更愿意将答案留给正则表达式大师 :)
-
是的,但
[A-Z]+应该适用于多个字母(或类似的东西)。