首页 > 解决方案 > 如何在 R 中重复一个 for 循环 n 次?

问题描述

我试图在 R 中重复一个 for 循环固定次数。这是我要重复的代码示例

for (i in 1:nrow(data)) {
  if (i>130){
    data$deltas[i]=-((-data$p[i]))*data$alphas[i]
  }
  else  {
    data$deltas[i]=
      ((-(((data$p[i+1])-(data$p[i])))*data$alphas[i]) + data$deltas[i+1])
  }
}

我没有任何需要满足的条件,只需要在同一个数据集上运行相同的代码 n 次。

标签: rfor-loop

解决方案


如果我们想重复循环“n”次,请使用循环for创建一个functionfor

f1 <- function(data, ival) {  
       
      for(i in head(seq_len(nrow(data)), -1)) {
        if(i > ival) {
         data$deltas[i] <- -((-data$p[i])) * data$alphas[i]
        
        } else  {
         data$deltas[i] <- ((-(((data$p[i+1]) - (data$p[i]))) * 
                            data$alphas[i]) + data$deltas[i+1])
        }
      
      }
    return(data)

  }

并在每次迭代中分配数据

n <- 10
for(i in seq_len(n)) data <- f1(data, ival = 130)

使用一个小的可重现示例

set.seed(24)
df1 <- data.frame(deltas = rnorm(10), p = runif(10), alphas = rnorm(10))

-输入

df1
#         deltas          p      alphas
#1  -0.545880758 0.09393471 -0.46906069
#2   0.536585304 0.55225375 -0.33498679
#3   0.419623149 0.72516981  1.53625216
#4  -0.583627199 0.13792462  0.60999453
#5   0.847460017 0.22296603  0.51633570
#6   0.266021979 0.68767062 -0.07430856
#7   0.444585270 0.07648914 -0.60515695
#8  -0.466495124 0.59973018 -1.70964518
#9  -0.848370044 0.63014766 -0.26869311
#10  0.002311942 0.04663503 -0.64859151



n <- 10
for(i in seq_len(n)) df1 <- f1(df1, ival = 5)

-输出

df1
#         deltas          p      alphas
#1   0.832142549 0.09393471 -0.46906069
#2   0.617163102 0.55225375 -0.33498679
#3   0.559238507 0.72516981  1.53625216
#4  -0.342918176 0.13792462  0.60999453
#5  -0.291043381 0.22296603  0.51633570
#6  -0.051099814 0.68767062 -0.07430856
#7  -0.046287932 0.07648914 -0.60515695
#8  -1.025325821 0.59973018 -1.70964518
#9  -0.169316331 0.63014766 -0.26869311
#10  0.002311942 0.04663503 -0.64859151

推荐阅读