我被这个问题困住了,我的 R 能力显然不足以解决它。希望有人可以帮助我。
我目前正在编写一个使用包“drc”的函数“drm”的脚本。我想从 drm 使用不同给定函数生成的最佳模型中获取 EC10、20 和 50 值。我想为不与所有或部分这些函数收敛的数据集实现一个解决方案(例如,如果没有,则打印出“数据集不收敛”)。使用 tryCatch 处理错误不起作用。它只捕获“drmOpt”产生的错误,而不是“optim”产生的错误,从而停止脚本。
这是我在没有 try 或 tryCatch 的情况下得到的错误:
optim(startVec, opfct, hessian = TRUE, method = optMethod, control = list(maxit = maxIt, : 非有限有限差分值 [2]
drmOpt 中的错误(opfct, opfct1, startVecSc, optMethod, constrained, warnVal , : 收敛失败
使用 try 或 tryCatch 我只会收到第一个错误。
可以使用以下代码重现该错误(LL.2 会产生错误,LL.3 不会):
library(drc)
library(data.table)
data <- data.table(Dose = c(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 3.0, 3.0, 3.0, 3.0, 9.0, 9.0, 9.0, 9.0, 27.0, 27.0, 27.0, 27.0, 81.0, 81.0, 81.0, 81.0), Value = c(1, 3, 2, 7, 5, 7, 6, 0, 2, 2, 4, 6, 4, 5, 4, 2, 2, 4, 5, 5, 4, 4, 3, 1, 6, 5, 4, 2))
data.LL.2 <- drm(Value ~ Dose, data = data, fct = LL.2(), type = "continuous")
data.LL.3 <- drm(Value ~ Dose, data = data, fct = LL.3(), type = "continuous")
data.LL.2.try <- tryCatch(drm(Value ~ Dose, data = data, fct = LL.2(), type = "continuous"), error = function(e) "No convergence")
data.LL.3.try <- tryCatch(drm(Value ~ Dose, data = data, fct = LL.3(), type = "continuous"), error = function(e) "No convergence")
我不想调整数据集或更改函数,因为脚本应该与循环中的许多数据集和许多无法单独处理的函数一起使用。在这种情况下,输出“不与此函数收敛”是有价值的信息。
非常感谢您提前。