Бесконечный цикл прогона в R - PullRequest
0 голосов
/ 04 сентября 2018

Я недавно создал этот код, и я борюсь со временем выполнения моих циклов for. Если я попытаюсь запустить этот код, R, кажется, займет вечность, и я не уверен, где ошибка:

Graph <- rbind(c(0,0.8,0,0.2,0.1),
          c(0,0,0.7,0.6,0.1),
          c(0,0,0,0,0.9),
          c(0,0,0,0,0.2),
          c(0,0,0,0,0))
AmountNodes<-5
Method<-"unweighted"
InfectedNodes<-c(1)

## Function Amount Excluded
SIR_algorithm<-function(Graph, AmountNodes, Method){
ResultMatrix <- rep(0, AmountNodes)
as.data.frame(ResultMatrix)
if (strcmp(Method,"unweighted")){
Graph <- sign(Graph)}
for (i in 1:AmountNodes){
InfectedNodes <- rep(AmountNodes, 0)
ExcludedNodes <- rep(AmountNodes, 0)
InfectedNodes <-c(1)} # Initial Infection, k=Columns, j=Rows

while(sum(InfectedNodes) > 0){
  InfectedNodes_Reflection <- InfectedNodes
  for (j in 1:nrow(Graph)){
    if (Graph[j] == 1){
      for (k in 1:ncol(Graph)){
        if ((Graph[k,j] > 0 && (InfectedNodes[k][1]) == 0 && (ExcludedNodes[k][1]) == 0)){ 
          RandomValue <- runif(1, max=1, min=0) 
          if (RandomValue < (Graph[k,j])){
            InfectedNodes_Reflection[k] <- k == 1
          } #End If-Function
        } #End If-Function
      } #End For-Function k
    } #End If-Function
  }} #End For-Function j

  for (j in 1:AmountNodes){ 
    if (InfectedNodes[j] == 1){
      InfectedNodes[j] <- c(0)
      InfectedNodes_Reflection[j] <- c(0)
      ExcludedNodes[j] <- c(1)}} #End If-Function and for-function

  InfectedNodes <- InfectedNodes_Reflection
  ResultMatrix[i] <- ExcludedNodes
  length(ResultMatrix) #check length for ResultMatrix
  length(ExcludedNodes) #check length for ExcludedNodes
} #End While-Function
#End For-Function i
AmountExcluded <- sum(ResultMatrix)/AmountNodes
#Damage Values<- ResultMatrix * Damage Potential
}  #End Function_total

SIR_algorithm(Graph=Graph,AmountNodes=5,Method="unweighted")

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 05 сентября 2018

Проблема находится в следующих строках:

...
while(sum(InfectedNodes) > 0){
  print(sum(InfectedNodes))
  InfectedNodes_Reflection <- InfectedNodes
...

sum(InfectedNodes) является константой и равно 1. Так что цикл бесконечен.

...