从R中的列表生成嵌套命名列表
我正在尝试准备一个数据结构,稍后在脚本中需要它。假设我在一个图形域中,我的节点(有时只有1个,但大多数是2个甚至3个)有名称(例如,从R中的列表生成嵌套命名列表,r,arrays,list,R,Arrays,List,我正在尝试准备一个数据结构,稍后在脚本中需要它。假设我在一个图形域中,我的节点(有时只有1个,但大多数是2个甚至3个)有名称(例如,“left”,“right”,“center”)。这些名称存储在一个变量中: origin_target_list <- c("left", "center", "right", "") 我知道这是一个复杂的问题,我现在正在自己解决。。。我会用我的尝试来更新这篇文章…这个函数应该
“left”
,“right”
,“center”
)。这些名称存储在一个变量中:
origin_target_list <- c("left", "center", "right", "")
我知道这是一个复杂的问题,我现在正在自己解决。。。我会用我的尝试来更新这篇文章…这个函数应该做你想做的事情。但是您必须用一些东西来填充列表元素,而不仅仅是一个空向量,因为如果它们是空的,那么它们将再次被删除。因此,我用一个包含单个NA的向量填充它们:
make_dynlist = function(nodes){
l = list("unknown"=list("right"=c(NA),
"left"=c(NA),
"center"=c(NA)))
if(length(nodes)>1){
for(n in c(nodes)){
l[[n]]=list()
for(d in nodes){
if(n!=d){
l[[n]][[d]]=c(NA)
}
}
}
}
return(l)
}
产出将是:
> make_dynlist(c("left", "center", "right"))
$unknown
$unknown$right
[1] NA
$unknown$left
[1] NA
$unknown$center
[1] NA
$left
$left$center
[1] NA
$left$right
[1] NA
$center
$center$left
[1] NA
$center$right
[1] NA
$right
$right$left
[1] NA
$right$center
[1] NA
> make_dynlist(c("center"))
$unknown
$unknown$right
[1] NA
$unknown$left
[1] NA
$unknown$center
[1] NA
下面是一个使用
lappy
的简单实现:
make_list$left$right
#>空的
#>
#>$left$center
#>空的
#>
#>$left$unknown
#>空的
#>
#>
#>美元对
#>$right$left
#>空的
#>
#>$right$center
#>空的
#>
#>$right$未知
#>空的
#>
#>
#>$center
#>$center$left
#>空的
#>
#>$center$right
#>空的
#>
#>$center$未知
#>空的
#>
#>
#>$unknown
#>$unknown$left
#>空的
#>
#>$unknown$right
#>空的
#>
#>$unknown$center
#>空的
由(v0.3.0)于2020-08-17创建,您可以执行以下操作
#分配函数以创建列表
创建一个4人的列表
#R> $left:3人名单
#R> ..$center:NULL
#R> ..$right:NULL
#R> ..$unknown:NULL
#R> $center:共3个
#R> ..$left:NULL
#R> ..$right:NULL
#R> ..$unknown:NULL
#R> $right:3人名单
#R> ..$left:NULL
#R> ..$center:NULL
#R> ..$unknown:NULL
#R> $unknown:3人名单
#R> ..$left:NULL
#R> ..$center:NULL
#R> ..$right:NULL
#您可以像这样更改类型和元素名称
str(创建列表(c(“猫”、“狗”、“鸟”),数值()
#R> 3人名单
#R> $cat:2人名单
#R> ..$dog:num(0)
#R> ..$bird:num(0)
#R> $dog:2人名单
#R> ..$cat:num(0)
#R> ..$bird:num(0)
#R> $bird:2人名单
#R> ..$cat:num(0)
#R> ..$dog:num(0)
PS:如果您对数据结构有更好的想法,请随意更改。仍处于实施阶段…为了有更好的想法,我们必须知道您正试图实现的目标。对不起,我刚刚编辑了我的问题,以实际包括目标可用的未知。但到目前为止,这看起来不错!谢谢你这很聪明!这也是一个很好的解决方案。非常感谢。开箱即用!
make_dynlist = function(nodes){
l = list("unknown"=list("right"=c(NA),
"left"=c(NA),
"center"=c(NA)))
if(length(nodes)>1){
for(n in c(nodes)){
l[[n]]=list()
for(d in nodes){
if(n!=d){
l[[n]][[d]]=c(NA)
}
}
}
}
return(l)
}
> make_dynlist(c("left", "center", "right"))
$unknown
$unknown$right
[1] NA
$unknown$left
[1] NA
$unknown$center
[1] NA
$left
$left$center
[1] NA
$left$right
[1] NA
$center
$center$left
[1] NA
$center$right
[1] NA
$right
$right$left
[1] NA
$right$center
[1] NA
> make_dynlist(c("center"))
$unknown
$unknown$right
[1] NA
$unknown$left
[1] NA
$unknown$center
[1] NA