R:操纵列表名称

时间:2020-03-06 20:18:12

标签: r list rjson data.tree

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

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)

谢谢!

1 个答案:

答案 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"






相关问题