我有一个图表,我正在尝试模拟相互依赖的节点属性,并且不断变化,直到出现某种形式的均衡。但是,我无法使用for循环来处理这一系列命令。有什么东西我不见了吗?
library(igraph)
g <- make_empty_graph (2) %>%
set_vertex_attr("a", value = 1) %>%
add_vertices(2, color = 2, "a" = 2) %>%
add_vertices(2, color = 4, "a" = 3) %>%
add_edges(c(1,2, 2,1, 1,5, 5,1, 1,4 ,4,1)) %>%
set_vertex_attr("xyz", value = 3)
plot(g)
for(i in 1:3){
V(g)$xyz = sapply(V(g), function(x) { NeighborList = neighbors(g, x) ;length(NeighborList[NeighborList$a == 2]) } )
V(g)$a[V(g)$xyz==1]=2
V(g)$a
}
所以在这里我希望这段代码能够运行最后3行3次,但如果我像这样做一个for循环,绝对没有任何反应。 理想情况下,我希望它输出3行,如下所示:
[1] 2 1 2 2 3 3
[1] 2 2 2 2 2 3
[1] 2 2 2 2 2 3
所以我可以看到由于网络中的节点相互影响而发生的属性的变化
答案 0 :(得分:2)
在循环和功能中,自动打印已关闭。因此,以下内容不会打印出任何内容:
> for (i in 1:3) {
+ i
+ }
并且为了打印出某些东西,你明确地在循环中调用print
:
> for (i in 1:3) {
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
为了得到输出,在你的情况下你只需要在循环中添加print(...)
(或类似的):
> for(i in 1:3) {
+ V(g)$xyz = sapply(V(g), function(x) { NeighborList = neighbors(g, x) ;length(NeighborList[NeighborList$a == 2]) } )
+ V(g)$a[V(g)$xyz==1]=2
+ print(V(g)$a)
+ }
[1] 2 1 2 2 3 3
[1] 2 2 2 2 2 3
[1] 2 2 2 2 2 3