r - 将未命名的规则结构化 R 列表转换为命名 R 列表
问题描述
我有一个奇怪的 R 列表,其中作为字符串的奇数列表元素应该是偶数列表元素的名称。一些元素是列表中的列表。列表的深度不是预先定义的。而列表的简化结构大致为:
a <- list("key0",
"value0",
"key",
list("key1", "value1",
"key2", "value2",
"key3", list("key6", "value6"),
"key4", "value4",
"key5", list(list(list("key7", "value7")))
))
如何从列表a
中获取常规命名的 R 列表b
?
b <- list(key0 = "value0",
key = list(key1 = "value1",
key2 = "value2",
key3 = list(key6 = "value6"),
key4 = "value4",
key5 = list(list(list(key7 = "value7")))
))
像数据结构这样的列表a
有什么特殊的技术名称吗?
解决方案
使用递归函数:
fun <- function(x){
x <- lapply(x,function(y) if (is.list(y)) y <- fun(y) else y)
if(!is.null(names(x)) | length(x) == 1) return(x)
x <- setNames(x[seq_along(x)%%2 == 0], x[seq_along(x)%%2 == 1])
x
}
res <- fun(a)
identical(b,res)
# [1] TRUE
推荐阅读
- javascript - 事件委托,Javascript中事件Target的使用
- react-native - 加载完成后获取高度 WebViewBridge
- javascript - 为什么在记忆游戏中第二张牌会自己翻转
- android - 升级到 AS 3.0 后无法解析符号 ConfigSlurper 和 XmlSlurper
- string - 在 Go 中执行 http 请求时出现乱码
- android - Recycler View with firebase just displaying the first instance
- haskell - Haskell Servant:使用任意请求数据获取请求
- angular - 错误 TS2552 试图在 Visual Studio 中运行开箱即用的 SPA 模板
- php - 尽管出现错误,如何捕获异常并继续
- php - 在 $_POST 上写入 DB 内的数组,如结果