R中循环的无限运行时间

R中循环的无限运行时间,r,performance,for-loop,time,runtime,R,Performance,For Loop,Time,Runtime,我最近创建了这段代码,我正在为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" In

我最近创建了这段代码,我正在为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")

Graph问题位于以下几行:

...
while(sum(InfectedNodes) > 0){
  print(sum(InfectedNodes))
  InfectedNodes_Reflection <- InfectedNodes
...
。。。
while(总和(感染节点)>0){
打印(总和(感染节点))

InfectedNodes\u Reflection错误在于您正在以C风格编写R代码。如果您利用其矢量化,R将大放异彩。(a)您能用语言描述您的代码在做什么吗?调试“代码”非常困难没有上下文。像
#End if function
这样的注释实际上没有多大帮助,因为它们解释的不是代码中不言而喻的东西,而像
#Random value这样的注释确定细胞是否被感染
可以帮助解释代码的目标…(b)您是如何尝试隔离问题的?您是否尝试过在循环计数器中添加
print
语句,以便可以知道它到达了多远?您是否尝试过使用较小的输入?您的
while
条件是
while(sum(InfectedNodes)>0)
,您是否有理由认为您的输入永远不会出现这种情况?您是否尝试过将其调整到“更容易”的条件以满足要求,以查看是否取得了进展?您是否尝试过一次一行地遍历循环?您能否判断问题是在(j in 1:nrow(图形))的
二级循环中还是在
中(j in 1:AmountNodes)
2级循环?…您能提供一个可复制的示例吗?请指定所需的包。此外,我尝试按原样运行示例,并且函数在您的注释
#End function\u total
返回到我以前的注释之前终止:您注意到有两个
}
函数j的括号应在何时结束?