Это происходит потому, что fitdist
(или на самом деле, mledist
, который вызывается fitdist
) уже выполняет некоторую перехват ошибок. Исходная ошибка находится в optim
и была обнаружена, а затем mledist
выводит на консоль сообщение об ошибке. Так что то, что вы видите, на самом деле не ошибка или даже предупреждение, а оператор печати с содержимым перехваченного сообщения об ошибке.
Бит mledist
, который делает это:
if (inherits(opttryerror, "try-error")) {
warnings("The function optim encountered an error and stopped.")
if (getOption("show.error.messages"))
print(attr(opttryerror, "condition"))
return(list(estimate = rep(NA, length(vstart)), convergence = 100,
loglik = NA, hessian = NA, optim.function = opt.fun,
fix.arg = fix.arg, optim.method = meth, fix.arg.fun = fix.arg.fun,
counts = c(NA, NA)))
}
Это не очень хорошая практика, именно потому, что она вызывает проблему, которая у вас сейчас есть; это мешает другим людям систематически обрабатывать ошибки.
Как видно из этого кода, вы можете отключить его, установив для параметра show.error.messages
значение FALSE:
options(show.error.messages = FALSE)
но вы хотите быть осторожным с этим, поскольку вы не увидите никаких сообщений об ошибках до конца сеанса R. Вы определенно не хотите делать это на чужой сессии.
Другой альтернативой является использование sink("extra-error-messages.txt")
для отправки всей печати куда-нибудь на консоль (может быть, даже на ваш error_log.txt
, но я не уверен, что это вызовет проблемы с несколькими вещами, записывающими в него).