2014-05-14 31 views
5

Stavo cercando un'implementazione HMM in R per analizzare gli stati in una stringa di caratteri e la libreria HMM sembra funzionare lentamente, quindi sto usando la libreria RHmm.r - viterbi RHmm Errore protezione stack overflow

miei dati è una stringa di 1953138 simboli (U, D, N)

questo è un esempio dei miei dati:

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

raccordo HMM

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

esecuzione Viterbi e qui è dove ho l'errore

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

Tuttavia, se io uso solo un sottoinsieme della Viterbi stringa() funziona bene:

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

In realtà se si tenta di eseguire:

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

ottengo lo stesso errore di overflow dello stack, quindi 49964 gli elementi nel vettore sono il limite

Penso che il problema potrebbe essere correlato al fatto che l'opzione R predefinita di --max-ppsize è 50000, ma cambiando questo parametro al suo limite --max-ppsize 500000 non lo fa #risolvi il problema. Tuttavia, il limite vettoriale in viterbi() aumenta, passa da 49964 elementi a qualcosa intorno a 499960 elementi nel vettore stringa.

Ho provato a eseguire l'algoritmo viterbi in blocchi. Per prima cosa ho splited la stringa in blocchi di 49960 elementi e applicare Viterbi a ciascuno di essi, ma ho ottenuto lo stesso errore

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 

Qui in StackOverflow ho trovato un problema simile a quello che sto avendo LINK. Apparentemente la fonte del problema era un PROTECT all'interno di un loop che non è necessario. Sono passato al codice sorgente C++ della funzione viterbi, ma non c'è un singolo PROTECT.

Ho anche provato ulimit -s unlimited, ma sto ottenendo lo stesso errore.

Sto lavorando su UNIX con 1009 GB di memoria RAM

link per le RHmm package

Grazie mille per l'aiuto!

+0

Im correre nello stesso problema se non con un vettore con milioni di osservazioni - hai mai risolvere il problema? –

+0

Non ancora, ho provato a contattare gli sviluppatori ma finora non ho avuto fortuna. – Sierra

risposta

0

aumento del punto di dimensione dello stack quando R inizia:

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

come ho detto sopra, ho usato --max-ppsize 500000 che è il limite di R. Ancora, l'errore si apre. – Sierra