1

一部のマルコフ モデルに合わせて VLMC を使用していますが、アルファベット サイズが 28 になるとすぐに死んでしまいます。これは、デフォルトでアルファベットが 1 文字しか使用されていないためだと思いましたが、「code1char = FALSE」でも同じ動作をします。これは、この偽の例だけでなく、実際のデータについても当てはまります。

library(VLMC)

# works fine
ins <- sample(seq(1,27,1),50000,replace=T)
vlmc(ins, dump = 1,threshold.gen = 2, debug = TRUE)

#core dump
ins <- sample(seq(1,28,1),50000,replace=T)
vlmc(ins, dump = 1,threshold.gen = 2, debug = TRUE)

何か案は?

セグフォルトはこのBTWのように見えます。z が NA にマップされた後のアルファベットのように見え、これが配列バインドの問題を引き起こしています。

library(VLMC)

sc <- 10
amp <- 13
x <- round(amp*sin(seq(0,2*sc*pi,0.01)))
x <- amp + x + rpois(NROW(x),1)
length(table(x))
length(x)

vlmc(x, dump = 1,threshold.gen = 2, debug = TRUE)

vlmc: Alpha = 'abcdefghijklmnopqrstuvwxyzNANANANANA' ; |X| = 31
vlmc: ctl.dump =  4 11 
vlmc: n = |data| = 6284, cutoff{prune} = 21.8865, threshold{gen} = 2
vlmc: |alphabet| = 31, alphabet = abcdefghijklmnopqrstuvwxyzNA
generating... 
*** caught segfault ***
  address 0x0, cause 'memory not mapped'

Traceback:
  1: .C("vlmc_p", data = Data, n = n, threshold.gen = as.integer(threshold.gen),     cutoff.prune = as.double(cutoff.prune), alpha.len = as.integer(alpha.len),     alpha = as.character(Alpha), debug = as.integer(as.logical(debug)),     dump.flags = as.integer(c(dump, ctl.dump)), size = integer(4),     PACKAGE = "VLMC")
2: vlmc(x, dump = 1, threshold.gen = 2, debug = TRUE)
4

1 に答える 1

2

VLMCの管理者として、VLMC の TODO エントリの中で最も長く続いているものの 1 つは、現在組み込まれている最大アルファベット サイズの制限である 26 を引き上げる必要があるということです。

もちろん、大きなアルファベットの場合にエラー メッセージを表示せず、C に渡してそこでチェックしないのはバグです。VLMC の次のバージョンでは、これに対する seg.fault は発生しなくなります。

ただし、かなり大きなアルファベットを許可する時間が見つかるかどうかはまだわかりません....もちろん、喜んでパッチを受け入れます...それは無料のオープンソースソフトウェアです.

よろしくお願いします、Martin Maechler、ETH チューリッヒ

于 2012-07-04T18:58:28.977 に答える