这是为我崩溃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
参数为numeric(0)
。 这会dtruncnorm
崩溃,这会调用C++代码
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
/在此处提交问题的维护者将是具有社区意识的......
一旦 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)))