R中的递归环境

R中的递归环境,r,recursion,R,Recursion,在R中使用递归时,拥有递归环境也很有用。例如,在下面的示例中,下面的代码打印1到9是有用的。也就是说,每个递归环境中的x将比父环境中的x多一个。有没有一种简单的方法来修改代码,使之成为现实 x = 1 y = function() { print(x) x = x + 1 if (x <= 10) y() } x=1 y=函数(){ 打印(x) x=x+1 若(x,你们可以使用for循环,在每次迭代中建立变量状态的向量。若它运行很长时间,这可能会变得低效 w <- 1

在R中使用递归时,拥有递归环境也很有用。例如,在下面的示例中,下面的代码打印1到9是有用的。也就是说,每个递归环境中的x将比父环境中的x多一个。有没有一种简单的方法来修改代码,使之成为现实

x = 1
y = function() {
  print(x)
  x = x + 1
  if (x <= 10) y()
}
x=1
y=函数(){
打印(x)
x=x+1

若(x,你们可以使用for循环,在每次迭代中建立变量状态的向量。若它运行很长时间,这可能会变得低效

w <- 1
x <- 2
y <- 3
z <- 4
while(w[1] <= 10){
  w <- c(w[1] + 1, w)
  x <- c(w[1] + x[1], x)
  y <- c(x[1] + y[1], y)
  z <- c(y[1] + z[1], z)
}
cbind(w, x, y, z)

w可能是
y,但我希望整个父环境都可用,而不仅仅是递归之间传递的某些参数。可用是什么意思?我想知道这个问题是否可以解决您的请求:在当前示例中,函数
y
覆盖变量
y
。对全局环境(如
w=w+1
)将只生成变量的本地副本,但保留原始副本不变。在您的情况下,这意味着函数将永远无法完成。
w <- 1
x <- 2
y <- 3
z <- 4
while(w[1] <= 10){
  w <- c(w[1] + 1, w)
  x <- c(w[1] + x[1], x)
  y <- c(x[1] + y[1], y)
  z <- c(y[1] + z[1], z)
}
cbind(w, x, y, z)
y <- function(v=c(w=1, x=2, y=3, z=4)) {
  print(v["x"])
  v["w"] <-      1 + v["w"]
  v["x"] <- v["w"] + v["x"]
  v["y"] <- v["x"] + v["y"]
  v["z"] <- v["y"] + v["z"]
  if (v["w"] <= 10){
    y(v)
  } else {
    v
  }
}
y()