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