如何在r中重复For循环?

时间:2020-02-26 20:56:27

标签: r loops for-loop

我试图创建一个for循环,并在每次迭代中替换aux_j中的值。

在一个示例中,我的函数范围从1到box_size [1] * ninbox2 [1]计算向量aux_j [1]中的值,并且(您可以手动运行下面的代码来实现)传递给j = 1 + 1 = 2,然后重复这些步骤,计算出aux_j [2]。

这似乎很奇怪,但是我需要在每个步骤中替换这些值。最后一个“ aux_j”将仅包含迭代[22]的值。

aux_j<-0
box_size<-c(4,5,6,7,8,9,10,11,12,14,16,18,20,22,24,27,30,33,36,40,44,48)
ninbox2 <-c(50,40,33,28,25,22,20,18,16,14,12,11,10,9,8,7,6,6,5,5,4,4)

j<-1 # up here only need run one time

for(i in 1:(box_size[j]*ninbox2[j])){ 


  if(i==1){

    aux_j[1]<- box_size[j] 

  }

  else if(i>=2){
    aux_j[i] <- aux_j[i-1]+ box_size[j]


  }

}

    j<-j+1




aux_j

1 个答案:

答案 0 :(得分:1)

尝试以下方法。

计算aux_j的第一种方法是使用双for循环,但是每次通过最里面的循环,aux_j的值都会被重写。这只是简化的代码。

aux_j_size <- max(box_size*ninbox2)
aux_j <- numeric(aux_j_size)
for(j in seq_along(ninbox2)){
  for(i in 1:(box_size[j]*ninbox2[j])){ 
    aux_j[i] <- box_size[j] 
    if(i >= 2){
      aux_j[i] <- aux_j[i - 1] + aux_j[i]
    }
  }
}
aux_j

第二种方法还使用了双循环,外部lapply循环和内部for循环。向量aux_jfor循环中计算,并且每个向量都保存在列表aux_list中。最后,为列表的成员分配了名称aux_01aux_02等。

aux_list <- lapply(seq_along(ninbox2), function(j){
  aux_j <- numeric(box_size[j]*ninbox2[j])
  for(i in seq_len(box_size[j]*ninbox2[j])){ 
    aux_j[i] <- box_size[j] 
    if(i >= 2){
      aux_j[i] <- aux_j[i - 1] + aux_j[i]
    }
  }
  aux_j
})

names(aux_list) <- sprintf("aux_%02d", seq_along(ninbox2))
aux_list