如何在 R 中定义递归 for 循环?



我有一个先前未知数量的变量,对于每个变量,我需要定义一个for循环并执行一系列操作。对于每个后续变量,我需要在前一个变量中定义一个嵌套循环,执行相同的操作。我想一定有一种方法可以递归地做到这一点,但我正在努力解决这个问题。

例如,考虑以下简单示例:

results = c()
index = 0
for(i in 1:5)
{
a = i*2
for(j in 1:5)
{
b = a*2 + j
for(k in 1:5)
{
index = index + 1
c = b*2 + k
results[index] = c
}
}
}

在这个例子中,我将有 3 个变量。j 上的循环需要来自循环 i 的信息,k 上的循环需要来自循环 j 的信息。这是我问题的简化示例,这里的操作非常简单。我对获取"结果"向量的另一种方法不感兴趣,我想知道的是是否有办法对未知数量的变量(假设 10 个变量(递归执行此操作,这样我就不需要手动嵌套 10 个循环。

这里有一种方法,你可以根据你的情况进行修改......

results <- 0                                     #initialise
for(level in 1:3){                               #3 nested loops - change as required
results <- c(                                  #converts output to a vector
outer(results,                    #results so far
1:5,                        #as in your loops
FUN = function(x,y) {x*2+y} #as in your loops
)
) 
}

这样做的两个问题是

a( 您的公式在第一个(外部(循环中不同,并且

b( 结果顺序与您的不同

但是,根据您的实际问题,您也许能够找到这些解决方法。

我试图更改代码,使其成为一个允许定义需要发生多少次迭代的函数。

library(tidyverse)

fc <- function(i_end, j_end, k_end){
i <- 1:i_end
j <- 1:j_end
k <- 1:k_end
df <- crossing(i, j, k) %>%
mutate(
a = i*2,
b = a*2 + j,
c = b*2 + k,
index = row_number())
df
}
fc(5,5,5)

最新更新