I H*_* Ho 7 error-handling r drc
我被这个问题困住了,我的 R 能力显然不足以解决它。希望有人可以帮助我。
我目前正在编写一个脚本,该脚本使用包“drc”的函数“drm”。我想从 drm 使用不同给定函数生成的最佳模型中获取 EC10、20 和 50 值。我想为不与所有或部分这些函数收敛的数据集实现一个解决方案(例如,如果不收敛,则打印出“数据集不收敛”)。使用 tryCatch 处理错误不起作用。它只捕获“drmOpt”产生的错误而不是“optim”产生的错误,从而停止脚本。
这是我在没有 try 或 tryCatch 的情况下得到的错误:
优化错误(startVec,opfct,hessian = TRUE,method = optMethod,control = list(maxit = maxIt,:非有限有限差分值[2]
drmOpt(opfct,opfct1,startVecSc,optMethod,约束,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")
Run Code Online (Sandbox Code Playgroud)
我不想调整数据集或更改函数,因为脚本应该与循环中的许多数据集以及许多无法单独处理的函数一起使用。在这种情况下,输出“不与此函数收敛”是一个有价值的信息。
非常感谢您提前。