Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的列表生成嵌套命名列表_R_Arrays_List - Fatal编程技术网

从R中的列表生成嵌套命名列表

从R中的列表生成嵌套命名列表,r,arrays,list,R,Arrays,List,我正在尝试准备一个数据结构,稍后在脚本中需要它。假设我在一个图形域中,我的节点(有时只有1个,但大多数是2个甚至3个)有名称(例如,“left”,“right”,“center”)。这些名称存储在一个变量中: origin_target_list <- c("left", "center", "right", "") 我知道这是一个复杂的问题,我现在正在自己解决。。。我会用我的尝试来更新这篇文章…这个函数应该

我正在尝试准备一个数据结构,稍后在脚本中需要它。假设我在一个图形域中,我的节点(有时只有1个,但大多数是2个甚至3个)有名称(例如,
“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