r - R:操作列表名称
问题描述
这是我最小的可重现示例:
temp = list()
temp$rows$`1`$rows$name <- "rows"
temp$rows$`1`$rows$`1`$cells$name <- "cells"
temp$rows$`2`$rows$name <- "rows"
temp$rows$`2`$rows$`2`$cells$name <- "cells"
电流输出:
$rows
$rows$`1`
$rows$`1`$rows
$rows$`1`$rows$name
[1] "rows"
$rows$`1`$rows$`1`
$rows$`1`$rows$`1`$cells
$rows$`1`$rows$`1`$cells$name
[1] "cells"
$rows$`2`
$rows$`2`$rows
$rows$`2`$rows$name
[1] "rows"
$rows$`2`$rows$`2`
$rows$`2`$rows$`2`$cells
$rows$`2`$rows$`2`$cells$name
[1] "cells"
我想知道是否有一种编程方式可以替换此列表中的$1
to[[1]]
和$2
to [[2]]
?所以让输出看起来像这样,因为这是在将列表转换为 JSON 时制作数组的重要步骤。
$rows
$rows[[1]]
$rows[[1]]$rows
$rows[[1]]$rows$name
[1] "rows"
$rows[[1]]$rows[[1]]
$rows[[1]]$rows[[1]]$cells
$rows[[1]]$rows[[1]]$cells$name
[1] "cells"
$rows[[2]]
$rows[[2]]$rows
$rows[[2]]$rows$name
[1] "rows"
$rows[[2]]$rows[[2]]
$rows[[2]]$rows[[2]]$cells
$rows[[2]]$rows[[2]]$cells$name
[1] "cells"
这是我尝试过但没有以正确方式工作的方法:
lapply(temp$rows$
1, unname)
谢谢!
解决方案
这是你想要的吗?
首先有一个函数可以将名称为“1”或“2”的任何列表元素重命名为空字符串。
第二个函数是递归的,通过嵌套列表将第一个函数应用于每个元素。
fixnames <- function(x){
names(x)[names(x)==1] <- ""
names(x)[names(x)==2] <- ""
x
}
rename <- function(x) {
if(is.list(x)) lapply(fixnames(x), rename) else x
}
> rename(temp)
$rows
$rows[[1]]
$rows[[1]]$rows
$rows[[1]]$rows$name
[1] "rows"
$rows[[1]]$rows[[2]]
$rows[[1]]$rows[[2]]$cells
$rows[[1]]$rows[[2]]$cells$name
[1] "cells"
$rows[[2]]
$rows[[2]]$rows
$rows[[2]]$rows$name
[1] "rows"
$rows[[2]]$rows[[2]]
$rows[[2]]$rows[[2]]$cells
$rows[[2]]$rows[[2]]$cells$name
[1] "cells"
推荐阅读
- react-native - 用 jest + 酶测试 react-native-navigation wix
- c - C整数到二进制转换,将结果分成两个二进制值
- javascript - 即使在清除实例后 Gojs 状态仍然存在
- c# - C#中数组的初始化
- python - 从烧瓶中的另一个 API 多次调用一个 API
- java - mockito '您不能在验证或存根之外使用参数匹配器。' 用java
- sql - 如果您需要较少的分组列,如何仅选择 max(id)
- c - Journalctl 从 C 程序到 .txt 文件
- reactjs - 使用图像覆盖(card-img-overlay)时,无法再在 chrome 开发工具中选择子元素
- php - Laravel 放弃依赖问题