К сожалению, я думаю, что это сделать нелегко, если не невозможно.Похоже, что только используемые аргументы forceNetwork
, относящиеся к узлам, инициализируются в базовом коде:
Рассмотрим, например,
script <- 'alert("row: " + (d.index + 1) +
", name: " + d.name +
", group: " + d.group +
", size: " + d.nodesize +
", var1: " + d.var1)'
# Plot
d3 <- forceNetwork(Links = MisLinks, Nodes = new.nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Nodesize = "size",
Group = "group", opacity = 0.8,
clickAction = script)
print(d3)
Как вы можете видеть при нажатии на узелниже, var1 не определено.Примечание. Я добавил аргумент Nodesize
к вызову функции, доступ к которому теперь можно получить через скрипт d.nodesize
(а не d.size
).Переменная и аргумент group
, в этом случае, названы одинаково, поэтому различие здесь потеряно.Тем не менее, к NodeID
, очевидно, обращаются по указанному имени, которое я нахожу несовместимым.
Вы можете увидеть сгенерированный источник, сохранив:
saveNetwork(d3, file = "test.html")
Вы можете заметить, посмотрев на него, что значения, которые вы намереваетесь вывести, не сохраняются в файле.
Редактировать:
По вашему собственному предположению, это приходитчто-то вроде обходного пути:
new.nodes$newname <- with(new.nodes, paste(", name: ", name, ", group: ", group,
", size: ", size, ", var1: ", var1,
", var2: ", var2))
newscript <- 'alert("row: " + (d.index + 1) + d.name)'
forceNetwork(Links = MisLinks, Nodes = new.nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "newname", Nodesize = "size",
Group = "group", opacity = 0.8, opacityNoHover = 0,
clickAction = newscript)
Итак, нужно просто отформатировать строку так, как вы хотите, чтобы она отображалась.Недостатком является то, что name / NodeIDs очень длинные.И, как вы можете видеть, NodeID просто всегда называется name
на стороне JS.