Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中定义递归for循环?_R_For Loop_Recursion - Fatal编程技术网

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

如何在R中定义递归for循环?,r,for-loop,recursion,R,For Loop,Recursion,我有一个未知数量的变量,对于每个变量,我需要定义一个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

我有一个未知数量的变量,对于每个变量,我需要定义一个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个循环

我已尝试更改代码,使其成为一个允许定义需要进行多少次迭代的函数

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)
库(tidyverse)

fc这里有一种方法,您可以根据自己的情况进行修改

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
                     )
               ) 
}

结果我的问题是这段代码将是更大函数的一部分。该函数控制变量的数量,因此我不知道该数量,以便定义“每个循环进行多少次迭代”的乘积。因此,我考虑递归执行。我试图更改代码,使其成为一个函数,并且您可以控制每个I、j、k等的迭代次数。对不起,我想我没有解释我自己。问题是,在这个例子中,我有(j,j,k)(3个元素),但在其他情况下,这可能会有所不同,我可能需要迭代(I,j)(2个元素)或(I,j,k,l,m,n)(6个元素)。。。我也不知道我的代码需要处理多少元素。