递归函数R的输出

时间:2015-06-05 11:41:39

标签: r

我试图在R中编写一个简单的递归函数,每次只返回一个数字。我想基本上将它们存储在一个列中。所以最初我宣布了类似的东西     relevant=c(rep(0,16)) 然后,如果它满足一些标准,我想改变相应的值 相关[j]至1。     if(something==1){       relevant[j]=1     }

但是当我在函数外面调用相关的所有值都是0.标准肯定是满足的,但它似乎并没有改变这些值!

任何帮助将不胜感激!

2 个答案:

答案 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

我希望这会有所帮助。