我正在使用VLMC来适应一些Markov模型,一旦字母大小达到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)
有什么想法吗?
seg故障看起来像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)
答案 0 :(得分:2)
作为VLMC的维护者, 我可以告诉你,VLMC最长的TODO条目之一就是提高当前内置限制为26,因为应该提高最大字母大小。
当然,这是一个错误,我不会在更大的字母表中给出错误消息,而是将内容传递给C并且不在那里检查。 VLMC的下一个版本将不再是seg.fault。
然而,我还不确定我会找时间让一个更大的字母表...... 当然,我很乐意接受补丁......它是免费的开源软件。
祝你好运, Martin Maechler,苏黎世联邦理工学院