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