r - viterbi RHmm 错误保护堆栈溢出

Posted

技术标签:

【中文标题】r - viterbi RHmm 错误保护堆栈溢出【英文标题】:r - viterbi RHmm Error protection stack overflow 【发布时间】:2014-07-03 00:32:03 【问题描述】:

我正在寻找 R 中的 HMM 实现来分析字符串中的状态,并且 HMM 库似乎运行缓慢,然后我正在使用 RHmm 库。

我的数据是一串 1953138 个符号 (U,D,N)

这是我的数据样本:

string <- sample(c("D","U","N"),1953138,replace=T)

拟合 HMM

HMM <- HMMFit(string,dis="DISCRETE",nStates=3)$HMM

运行维特比,这是我得到错误的地方

viterbi_results <- viterbi(HMM,string)
#Error: protect(): protection stack overflow

但是,如果我只使用字符串 viterbi() 的一个子集就可以了:

viterbi_results <- viterbi(HMM,string[1:49963])

实际上,如果我尝试运行:

viterbi_results <- viterbi(HMM,string[1:49964])
#Error: protect(): protection stack overflow

我得到相同的堆栈溢出错误,然后向量中的 49964 个元素是限制

我认为问题可能与 --max-ppsize 的默认 R 选项是 50000 的事实有关,但是将此参数更改为它的限制 --max-ppsize 500000 并不能#fix 问题。然而,viterbi() 中的向量限制确实增加了,它从 49964 个元素增加到字符串向量中的大约 499960 个元素。

我尝试分块运行维特比算法。首先,我将字符串拆分为 49960 个元素的块并将 viterbi 应用于每个元素,但我得到了同样的错误

list_string <- split(string, ceiling(seq_along(string)/49960))

viterbi_results <- lapply(list_string,function(x) viterbi(HMM,x)$states)
#Error: protect(): protection stack overflow

在 *** 中,我发现了与我遇到的 LINK 类似的问题。显然问题的根源是不需要的循环内的保护。我跳进了 viterbi 函数的 c++ 源代码,但没有一个 PROTECT。

我也试过 ulimit -s unlimited ,但我得到了同样的错误。

我正在使用 1009 GB RAM 内存的 unix

链接到RHmm package

非常感谢您的帮助!

【问题讨论】:

我遇到了完全相同的问题,除了具有数百万个观察值的向量 - 你解决过这个问题吗? 还没有,我尝试联系开发人员,但目前没有成功。 【参考方案1】:

R 启动时增加点栈大小:

R --max-pp-size=100000

【讨论】:

正如我上面提到的,我使用了--max-ppsize 500000,这是 R 中的限制。仍然,错误弹出。

以上是关于r - viterbi RHmm 错误保护堆栈溢出的主要内容,如果未能解决你的问题,请参考以下文章

RStudio 错误 - 创建大型环境对象:protect():保护堆栈溢出

错误:protect():使用 dbWriteTable (RSQLite) 写入文件时保护堆栈溢出

堆栈溢出

C++ 堆栈溢出

分段错误和堆栈溢出有啥区别?

js堆栈溢出错误