2014-05-14 8 views
5

R에서 HMM 구현을 찾고 문자열의 상태를 분석했으며 HMM 라이브러리가 느리게 실행되는 것 같습니다. 그런 다음 RHmm 라이브러리를 사용하고 있습니다.r - viterbi RHmm 오류 보호 스택 오버플로

내 데이터가이 내 데이터의 샘플입니다 1,953,138 문자 (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 
내가 문자열 비터 비 (중 일부만을 사용하지만 경우 363,210

는) 잘 작동합니다 :

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

을 사실 내가 실행하려고하면 :

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

내가 같은 스택 오버플로 오류가 발생하고 49,964 벡터의 요소가 한계입니다

저는이 문제가 --max-ppsize의 기본 R 옵션이 50000이지만이 매개 변수를 제한적으로 변경한다는 사실과 관련 있다고 생각합니다 --max-ppsize 500000 #문제를 해결. 그러나 viterbi()의 벡터 한도가 증가하면 문자열 벡터에서 49964 개 요소에서 약 499960 개 요소 정도가됩니다.

나는 viterbi 알고리즘을 청크로 실행하려고 시도했다. 우선은 49960 개 요소의 덩어리로 문자열을 splited하고 각 비터 비를 적용,하지만 난 내가 LINK을 데 하나의 유사한 문제가 발견 유래에 다음과 같은 오류를

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 

을 얻었다. 분명히 문제의 원인은 필요하지 않은 루프 안의 PROTECT였습니다. 나는 viterbi 함수의 C++ 소스 코드에 뛰어 들었지만 하나의 PROTECT는 없다.

나는 또한 ulimit -s unlimited을 시도했지만 동일한 오류가 발생합니다.

는 내가 도움을

링크를 RHmm package

덕분에 RAM 메모리의 1천9기가바이트와 유닉스에서 많이하고 있어요!

+0

임 관찰 수백만 벡터를 제외하고 동일한 문제로 실행 - 만약 당신이 문제를 해결 했습니까? –

+0

아직까지는 개발자에게 연락을 시도했지만 지금까지는 행운을 얻지 못했습니다. 위에서 언급 한대로 – Sierra

답변

0

증가 포인트 스택의 크기는 R은 시작할 때 :

R --max-pp-size=100000 
+0

을 사용했는데 R에서 한계 인 --max-ppsize 500000을 사용했습니다. 여전히 오류가 발생합니다. – Sierra