问题描述
这是使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)))
解决方法
作为其机制的一部分,fitdist
用x
的{{1}}参数调用指定的密度函数。这会导致numeric(0)
崩溃,该调用将调用C ++代码,而该代码并不期望...
dtruncnorm
是一种更快到达相同崩溃的方法。我试图通过创建自己的dtruncnorm(numeric(0))
包装器来解决此问题:
dtruncnorm()
但是到目前为止,它仍然沿线的某个地方崩溃。
联系dtruncnorm <- function(x,a,b,mean,sd) {
if (length(x)==0) numeric(0) else truncnorm::dtruncnorm(x,sd)
}
的维护者/提出问题here ...
一旦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)))