Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将递归函数嵌套在另一个函数中_R_Recursion - Fatal编程技术网

R 将递归函数嵌套在另一个函数中

R 将递归函数嵌套在另一个函数中,r,recursion,R,Recursion,我对递归函数没有太多涉猎,但成功地编写了f(),它完成了输出概率向量(本例中为N=3)的工作 # Data ps <- structure(c(0.68, 0.255, 0, 0.17, 0.595, 0, 0.15, 0.15, 1), .Dim = c(3L, 3L)) po <- structure(c(0.7, 0, 0, 0.3, 1, 1), .Dim = 3:2) pp <- c(1,0,0) y <- c(1,1,2,1,2,2,1,2) 另外,我知道有

我对递归函数没有太多涉猎,但成功地编写了
f()
,它完成了输出概率向量(本例中为N=3)的工作

# Data
ps <- structure(c(0.68, 0.255, 0, 0.17, 0.595, 0, 0.15, 0.15, 1), .Dim = c(3L, 3L))
po <- structure(c(0.7, 0, 0, 0.3, 1, 1), .Dim = 3:2)
pp <- c(1,0,0)
y <- c(1,1,2,1,2,2,1,2)

另外,我知道有一些软件包可以做我想做的事情(隐马尔可夫模型-前向算法)。我只是想了解引擎盖下发生了什么,更好地处理递归编程。我感谢社区的任何帮助。谢谢

您不需要矩阵,只需不断替换
pp
值即可

g <- function(pp, obs) {
  for ( i in 2:8) {
    pp <- f(obs[i], pp)
  }
  log(sum(pp))
}
g(pp, y)
# [1] -6.439479

g我意识到这个循环设计过度,并在冗长的文本中提出了这个解决方案。我想我希望找到一个使用递归的解决方案。也许我太花哨了。
g <- function(pp,obs){
  b <- matrix(0,3,8)
  b[,1] <- pp
  for(i in 2:8){
    b[,i] <- f(o = obs[i],pp = b[,i-1])
  }
  log(sum(b[,8]))
}

> g(pp = pp,obs = y)
[1] -6.439479
g <- function(pp, obs) {
  for ( i in 2:8) {
    pp <- f(obs[i], pp)
  }
  log(sum(pp))
}
g(pp, y)
# [1] -6.439479