2

这是在没有任何有用错误消息的情况下使 R 崩溃的代码。有任何想法吗?我在这里要疯了。谢谢,

library(fitdistrplus)
library(truncnorm)
set.seed(0)
x = rtruncnorm(n=30, a=0, b=Inf, mean=1, sd=0.45)
my_fit = fitdist(x, "truncnorm", method='mle', fix.arg=list(a=0, b=Inf), 
                 start=list(mean=mean(x), sd=sd(x)))
4

2 回答 2

2

作为其机制的一部分,使用参数fitdist调用指定的密度函数。这崩溃了,它调用了不期望的 C++ 代码......xnumeric(0)dtruncnorm

dtruncnorm(numeric(0))

是一种更快地到达相同崩溃的方法。我试图通过创建自己的dtruncnorm()包装器来解决这个问题:

dtruncnorm <- function(x,a,b,mean,sd) {
    if (length(x)==0) numeric(0) else truncnorm::dtruncnorm(x, a,b,mean,sd)
}

但到目前为止,它仍在沿线更远的地方崩溃。

在这里dtruncnorm联系/file的维护者是有社区意识的...

于 2020-08-16T01:59:46.227 回答
2

一旦 Ben Bolker 确定 truncnorm - 而不是 fitdist - 是问题所在,我决定简单地使用不同的库。以下代码对我来说执行得很好:

library(fitdistrplus)
library(extraDistr)
set.seed(0)
x = rtnorm(n=30, a=0, b=Inf, mean=1, sd=0.45)
my_fit = fitdist(x, "tnorm", method='mle', fix.arg=list(a=0, b=Inf), 
                 start=list(mean=mean(x), sd=sd(x)))
于 2020-08-16T02:38:40.317 回答