Проблемы с созданием списков в R для пакета networkD3

radialNetwork

Я хочу создать показанную выше радиальную сеть с помощью пакета R networkD3. Я прочитал здесь руководство, в котором списки используются для создания радиальных сетей. К сожалению, мои навыки R со списками отсутствуют. На самом деле их нет. К счастью, здесь есть руководство по R4DS.

Прочитав все, я придумал этот код ниже, чтобы создать диаграмму выше.

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

Увы, моя попытка не удалась. И последующие попытки не генерируют ничего похожего на диаграмму выше. Я почти уверен, что это мой список неверен. Может быть, вы можете показать мне правильный список, и все начнет обретать смысл.


person Display name    schedule 15.02.2019    source источник


Ответы (2)


Джейсон! Проблема здесь в том, что параметр 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)
person LocoGris    schedule 15.02.2019

Если вы похожи на меня и формат фрейма данных/электронной таблицы легче понять, вы можете создать простой фрейм данных с вашими данными, а затем использовать функции 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)

введите здесь описание изображения

person CJ Yetman    schedule 15.02.2019
comment
Этот метод кажется намного более удобным, и я, вероятно, в конечном итоге воспользуюсь им. А пока я попробую изучить списки и как это сделать с базовым R и без загрузки дополнительных пакетов. Тем не менее, проголосовал за это. Спасибо. - person Display name; 16.02.2019
comment
Вы можете написать рекурсивную функцию в базе R, чтобы сделать то же самое, но тогда вы вернетесь на территорию, изгибающую разум. ;-) - person CJ Yetman; 16.02.2019