递归函数R的输出
我试图在R中编写一个简单的递归函数,每次只返回一个数字。基本上,我想把它们存储在一个列中。所以我一开始是这样宣布的递归函数R的输出,r,R,我试图在R中编写一个简单的递归函数,每次只返回一个数字。基本上,我想把它们存储在一个列中。所以我一开始是这样宣布的 relevant=c(代表(0,16)) 如果它满足一些条件,我想改变 相关[j]到1。 如果(某物==1){ 相关[j]=1 } 但是当我调用函数外部的相关函数时,所有的值都是0。标准肯定得到了满足,但它似乎没有改变值 任何帮助都将不胜感激 这里有一个“足够简单的递归函数”,它将返回一个数字向量,每个数字都在函数中计算: serf <- function(x){
relevant=c(代表(0,16))
如果它满足一些条件,我想改变
相关[j]到1。
如果(某物==1){
相关[j]=1
}
但是当我调用函数外部的相关函数时,所有的值都是0。标准肯定得到了满足,但它似乎没有改变值
任何帮助都将不胜感激 这里有一个“足够简单的递归函数”,它将返回一个数字向量,每个数字都在函数中计算:
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
serf我不完全清楚您想要做什么,但我将其解释为具有一个递归函数,返回单个值,并希望将递归调用的结果作为副作用进行累加
下面是一个基于斐波那契数计算的示例,它使用闭包解决了这个问题。有几点需要注意:(1)这是一种非常低效的计算斐波那契数的方法。(2) 在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
>makefib请添加您的“足够简单的递归函数”和所需的输出(您可以查看以帮助您修改您的问题,以便我们更容易回答它)试图澄清一点,但如果仍然不清楚,请告诉我下面的答案对您有帮助吗?如果没有,你能解释一下原因吗?我仍然不清楚您到底想做什么:经过进一步的解释,我看不出哪里需要递归函数(甚至函数)。请添加您的实际函数和您期望的输出