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

标签 r stack-overflow bigdata viterbi

我在 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,这是我收到错误的地方
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 并不能解决问题。然而 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

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

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

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

链接到 RHmm package

非常感谢您的帮助!

最佳答案

R 启动时增加点堆栈大小:

R --max-pp-size=100000

关于r - viterbi RHmm 错误保护堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663356/

相关文章:

r - Shiny 的仪表板操作按钮

java - 递归过程中的第一个过程调用发生堆栈溢出

java - FloodFill 算法产生 StackOvlerflowError

java - 大型数组的快速排序 stackoverflow 错误

azure - AzureML 在哪里运行分析?

java - 涉及非常大的数组索引存储非常大的值的问题的替代方案

R - 删除在 data.frame 中多次出现的变量组合

r - 如何在ggraph R中翻转x轴和y轴

r - 如何在 RStudio 中打开动画图(gif/mp4)?

java - 如何在 Spark 中创建必须应用于数据集的函数管道?