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