1

我正在使用 VLMC 来拟合一些马尔可夫模型,一旦字母大小达到 28,它就会消失。我认为这是由于默认情况下在字母表中使用了一个字母,但它与“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 条目之一是提高当前内置的 26 限制,以便提高最大字母大小。

当然,这是一个错误,在较大字母表的情况下我不会给出错误消息,而是将内容传递给 C 并且不在那里检查。下一版本的 VLMC 将不再为此设置 seg.fault。

但是,我还不确定是否有时间允许使用更大的字母表……当然,我很乐意接受补丁……它是免费的开源软件。

最好的问候,Martin Maechler,苏黎世联邦理工学院

于 2012-07-04T18:58:28.977 回答