【问题标题】:Trouble creating lists in R for the networkD3 package在 R 中为 networkD3 包创建列表时遇到问题
【发布时间】:2019-02-15 21:56:29
【问题描述】:

我想使用 R 包 networkD3 创建上面的径向网络。我read the guide here 利用列表创建径向网络。不幸的是,我缺乏列表的 R 技能。它们实际上是不存在的。幸好there's the R4DS guide here

阅读完所有内容后,我想出了下面这段代码,以创建上面的图表。

library(networkD3)
nd3 <- list(Start = list(A = list(1, 2, 3), B = "B"))
diagonalNetwork(List = nd3, fontSize = 10, opacity = 0.9)

唉,我的尝试失败了。随后的尝试无法生成接近上图的任何内容。我很确定这是我的清单错了。也许你可以给我看正确的清单,事情就会开始变得有意义。

【问题讨论】:

    标签: r list htmlwidgets networkd3


    【解决方案1】:

    杰森! 这里的问题是参数 nd3 具有非常特定的节点名称和子节点语法。所以你的代码应该是这样的:

    library(networkD3)
    nd3 <- list(name = "Start", children = list(list(name = "A",
                                                      children = list(list(name = "1"),
                                                                      list(name = "2"),
                                                                      list(name = "3")
                                                                      )),
    
                                                     list(name = "B")))
    diagonalNetwork(List = nd3, fontSize = 10, opacity = 0.9)
    

    【讨论】:

      【解决方案2】:

      如果您像我一样,并且数据框/电子表格格式更容易理解,您可以使用您的数据构建一个简单的数据框,然后使用data.tree 函数将其转换为列表/json 格式...

      library(data.tree)
      library(networkD3)
      
      source <- c("Start", "Start", "A", "A", "A")
      target <- c("A", "B", "1", "2", "3")
      df <- data.frame(source, target)
      
      nd3 <- ToListExplicit(FromDataFrameNetwork(df), unname = T)
      
      diagonalNetwork(List = nd3, fontSize = 10, opacity = 0.9)
      

      【讨论】:

      • 这种方法确实看起来更方便,而且我可能最终会使用它。但是现在我将尝试学习列表以及如何使用基本 R 来做到这一点,而无需加载额外的包。尽管如此,仍然对此表示赞同。谢谢。
      • 你可以在基础 R 中编写一个递归函数来做同样的事情,但是你又回到了弯曲的领域。 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多