加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 04:34: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 运
我在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不能解决问题.然而,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.我跳进了维特比函数的c源代码,但没有一个PROTECT.

我也试过ulimit -s无限制,但我得到了同样的错误.

我正在使用1009 GB的RAM内存

链接到RHmm package

非常感谢您的帮助!

解决方法

R开始时增加点堆栈大小:

R --max-pp-size=100000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读