0

下面我分享了一个代码,尝试在使用data.treeR 软件包创建的树中添加子节点后遇到错误。错误说“尝试应用非函数”,我不知道我提供的数据类型是否有问题,或者它是否与语法有关。

> g <- Node$new("T")
> s <- g$AddChild("S")
> n <- g$AddChild("N")
> t <- n$AddChild("T")
> e <- n$AddChild("E")
> u <- e$AddChild("U")
> d <- e$AddChild("D")
> print(g)
      levelName
1 T            
2  ¦--S        
3  °--N        
4      ¦--T    
5      °--E    
6          ¦--U
7          °--D
> g$s$AddChild("F")
Error: attempt to apply non-function
4

1 回答 1

1

您的错误来自g没有名为 的成员的事实s。它有一个名为 的成员children,它本身也有一个名为的成员S(注意大写,因为您使用大写的“S”作为节点名称)。

您可以通过以下两种方式之一访问此节点:要么只使用s,因为这是您存储为对此节点的引用的全局环境中的变量,或者使用g$children$S,它也是对同一节点的直接引用。

如果您真的需要在全局环境中单独引用所有这些节点,您可以按照示例中的方式进行操作,在这种情况下,您的最后一行将是:

s$AddChild("F")

print(g)
#>       levelName
#> 1 T            
#> 2  ¦--S        
#> 3  ¦   °--F    
#> 4  °--N        
#> 5      ¦--T    
#> 6      °--E    
#> 7          ¦--U
#> 8          °--D

但是您可能希望明确地工作g以避免跟踪所有这些额外的变量,如以下完整的代表:

library(data.tree)

g <- Node$new("T")
g$AddChild("S")
g$AddChild("N")
g$children$N$AddChild("T")
g$children$N$AddChild("E")
g$children$N$children$E$AddChild("U")
g$children$N$children$E$AddChild("D")

print(g)
#>       levelName
#> 1 T            
#> 2  ¦--S        
#> 3  °--N        
#> 4      ¦--T    
#> 5      °--E    
#> 6          ¦--U
#> 7          °--D

g$children$S$AddChild("F")

print(g)
#>       levelName
#> 1 T            
#> 2  ¦--S        
#> 3  ¦   °--F    
#> 4  °--N        
#> 5      ¦--T    
#> 6      °--E    
#> 7          ¦--U
#> 8          °--D

reprex 包于 2020-12-05 创建(v0.3.0)

于 2020-12-05T13:51:11.200 回答