2017-11-01 2 views
1

나는 그래프를 가지고 있으며, 서로 의존적 인 노드 속성을 시뮬레이션하려고하고 있으며, 평형의 형태가 발생할 때까지 끊임없이 변화하고 있습니다. 그러나이 일련의 명령으로 for 루프를 사용할 수는 없습니다. 내가 누락 된 것이 있습니까?R에서 일련의 기능을 어떻게 반복합니까?

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 루프를 수행하면 아무 일도 일어나지 않습니다.

[1] 2 1 2 2 3 3 

[1] 2 2 2 2 2 3 

[1] 2 2 2 2 2 3 

그래서 나는 서로

+1

루프가 3 번 같은 일을 반복 루프 카운터는'i' 내가 통해 각각의 시간을 사용하지 않습니다 아무것도 바뀌지 않습니다. 또한 예상되는 출력으로 질문을 편집 할 수 있습니까? –

+0

이 코드가 기대하는 바는 무엇이며 어떻게 평가 했습니까? 최소한 xyz와 'a'에 대한 정점 속성 값을 변경하는 것처럼 보입니다. –

+0

명확하지 않은 점에 대해 사과드립니다. 나는 'a'의 꼭지점 속성을 변경하고 값을 변경하기 위해 3 번 인쇄하기를 원했습니다. – Bill

답변

2

에 영향을 미치는 네트워크의 노드의 결과로 발생 속성의 변화를 볼 수 있었다 : 은 이상적으로는 다음과 같습니다 출력 3 선에 원 루프 및 기능에서 자동 인쇄 기능이 꺼져 있습니다. 당신은 루프 내에서 print를 호출하기 위해 명시 적으로 가지고 뭔가를 인쇄 할

> for (i in 1:3) { 
+ i 
+ } 

및 순서 : 따라서, 다음은 아무것도 출력하지 않습니다에, 출력을 얻기 위하여

> 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 
관련 문제