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"
这是我的最小可重现示例:
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"