首页 > 解决方案 > 不知道如何将其变成 R 中的 for 循环

问题描述

我正在寻找一种更优雅的编码方式,包括 for 循环。我不想单独索引电子表格的每一列,因为最终我想要一个更大的“tsf”矩阵。

有人对如何做到这一点有任何想法吗?

编辑:重要的部分是如果treat = 0,那么该行应该= 0;如果treat = 1,那么该行应该有一个重复的0-5序列

I <- 50                     
T <- 10            

treat <- round(runif(I,0,1))

tsf <- matrix(NA, I, T) #if treat = 0, then all rows should = 0; if treat = 1, then all rows should have a sequence of 0-5 that repeats until the end of the row

tsf[,1] <- ifelse(treat > 0, 0, round(runif(I,0,5)))
tsf[,2] <- ifelse(tsf[,1]>0 & tsf[,1]<5, tsf[,1]+1, 0)
tsf[,3] <- ifelse(tsf[,1]!=0 & tsf[,2]<5, tsf[,2]+1, 0)
tsf[,4] <- ifelse(tsf[,1]!=0 & tsf[,3]<5, tsf[,3]+1, 0)
tsf[,5] <- ifelse(tsf[,1]!=0 & tsf[,4]<5, tsf[,4]+1, 0)
tsf[,6] <- ifelse(tsf[,1]!=0 & tsf[,5]<5, tsf[,5]+1, 0)
tsf[,7] <- ifelse(tsf[,1]!=0 & tsf[,6]<5, tsf[,6]+1, 0)
tsf[,8] <- ifelse(tsf[,1]!=0 & tsf[,7]<5, tsf[,7]+1, 0)
tsf[,9] <- ifelse(tsf[,1]!=0 & tsf[,8]<5, tsf[,8]+1, 0)
tsf[,10] <- ifelse(tsf[,1]!=0 & tsf[,9]<5, tsf[,9]+1, 0)

标签: rloopsfor-loopif-statementnested-loops

解决方案


我想你有一个错字,即i应该是1。下面可能是for您的循环选项

tsf[,1] <- ifelse(treat > 0, 0, round(runif(I,0,5)))
for (k in 2:10) {
  tsf[,k] <- ifelse(tsf[,1]>0 & tsf[,k-1]<5, tsf[,k-1]+1, 0)
}

推荐阅读