如何在 R 中重复一系列函数?

How do I repeat a series of functions in R?

我有一个图表,我正在尝试模拟节点属性,这些属性相互依赖并且不断变化,直到出现某种形式的平衡。但是,我无法使用 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

所以我可以看到由于网络中的节点相互影响而发生的属性变化

在循环和函数中自动打印被关闭。因此,以下不会打印出任何内容:

> 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