问题描述
这可能看起来很简单,但我无法做到这一点。我想使用截止图绘制两种类型的节点,小节点和大节点。这些值在属性等级中。
这是一个小玩具示例
g1 <- graph(edges=c(1,2,3,1,4,2),n=4,directed=F) %>%
set_vertex_attr("names",value = LETTERS[1:4])
g1_degree <- degree(g1,mode = "total")
g1_degree
[1] 2 3 2 1
g1 <- set_vertex_attr(g1,"degree",value = g1_degree)
plot(g1,vertex.size=V(g1)$degree)
这给了我根据度数的每个节点,但是我想要度2和3大,小1的节点。 所以我试图编辑V(g1)$ degree
内的值ifelse(V(g1)$degree < 2,yes = V(g1)$degree==1,no = V(g1)$degree==5)
FALSE FALSE FALSE是
好吧,我检查了我的学位数值,但是如何使用所需的临界值覆盖TRUE或FALSE?
解决方法
这是两种解决方法。
一个与ifelse
一起的人,就像在问题中一样。
g1 <- set_vertex_attr(g1,"degree",value = ifelse(V(g1)$degree < 2,1,5))
V(g1)$degree
#[1] 5 5 5 1
另一个是findInterval
。它的性能要优于ifelse
,后者在大型数据集中可能很重要。
i <- findInterval(V(g1)$degree,c(0,2,Inf))
g1 <- set_vertex_attr(g1,value = c(1,5)[i])
V(g1)$degree
#[1] 5 5 5 1
在findInterval
索引c(10,50)[i]
中设置了不同的新大小后,图形如下所示。
g1 <- set_vertex_attr(g1,value = c(10,50)[i])
plot(g1,vertex.size = V(g1)$degree)