我试图创建一个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
答案 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_j
在for
循环中计算,并且每个向量都保存在列表aux_list
中。最后,为列表的成员分配了名称aux_01
,aux_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