我试图在R中编写一个简单的递归函数,每次只返回一个数字。我想基本上将它们存储在一个列中。所以最初我宣布了类似的东西
relevant=c(rep(0,16))
然后,如果它满足一些标准,我想改变相应的值
相关[j]至1。
if(something==1){
relevant[j]=1
}
但是当我在函数外面调用相关的所有值都是0.标准肯定是满足的,但它似乎并没有改变这些值!
任何帮助将不胜感激!
答案 0 :(得分:2)
这是一个简单的递归函数"这将返回一个数字向量,每个数字都在函数内计算:
serf <- function(x){
if (length(x)==5) {
return(x)
} else {
x <- c(x, x[length(x)]+1) ; serf(x)
}
}
serf(1)
#[1] 1 2 3 4 5
这是你的想法吗?
答案 1 :(得分:2)
我并不完全清楚你想做什么,但我把它解释为有一个递归函数,它返回一个值,并希望将递归调用的结果累积为副作用。
这是一个基于Fibonacci数的计算的例子,它使用闭包来解决这个问题。一些警告:(1)这是计算斐波纳契数的一种非常低效的方法。 (2)构建像values
元素这样的对象在R中是非常低效的;如果您事先知道结果的长度,那么将对象初始化为该长度并将其编入索引要好得多。
> makefib <- function(){
+ values <- vector("numeric")
+ function(n){
+ if (n == 0) return(values)
+ res <- if (n < 3) 1 else Recall(n - 1) + Recall(n - 2)
+ values[length(values) + 1] <<- res
+ res
+ }
+ }
> fib <- makefib()
> fib(6)
[1] 8
> fib(0)
[1] 1 1 2 1 3 1 1 2 5 1 1 2 1 3 8
我希望这会有所帮助。