R:操作列表名称

R: manipulate the list name

这是我的最小可重现示例:

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]] 并将 替换为 [[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"