我尝试使用此代码从data.frame开始创建树。
library(data.tree)
# Creates table "mbom"
mbom <- data.frame(
Lev. = c(1, 2, 3, 3, 2, 3, 4, 4),
item = c("A", "B", "D", "E", "C", "F", "D", "E"),
father = c(NA, "A", "B", "B", "A", "C", "F", "F")
)
# Function for tree creation
create_tree <- function(dataframe1, node_name = "A") {
node <- Node$new(node_name)
subset_dataframe1 <- subset(dataframe1, father == node_name)
if (nrow(subset_dataframe1) > 0) {
for (i in 1:nrow(subset_dataframe1)) {
children <- subset_dataframe1$item[i]
node_children <- create_tree(dataframe1, children)
node$AddChild(node_children)
}
}
return(node)
}
# Tree creation
mbom_tree <- create_tree(mbom)
字符串
预期输出为:
levelName
1 A
2 ¦--B
3 ¦ ¦--D
4 ¦ °--E
5 °--C
6 °--F
7 ¦--D
8 °--E
型
但在起跑线上
mbom_tree <- create_tree(mbom)
型
代码生成错误:
Error in as.vector(x, "character") :
cannot coerce type 'environment' to vector of type 'character'
Called from: as.character.default(name)
型
我已经尝试重新安装数据.帧包,但错误仍然存在.一旦我解决了这个小示例,我将扩展到由数千行和许多层次结构组成的层次结构。
1条答案
按热度按时间v64noz0r1#
正如在注解中已经提到的,这里不需要编写自定义函数。重新排列数据并创建一个定义路径的帮助字符串。然后你可以使用
as.Node()
。这里有一个例子(我想可以更简单):字符串