这是我最小的可重现示例:
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
替换为[[1]]
,将$2
替换为[[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)
谢谢!
答案 0 :(得分:1)
这就是我想要的吗?
首先,有一个函数可以将名称为“ 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"