如何解决使用 nls 处理 Sapply 循环中的错误 - 循环在第一个错误处停止并且不输出任何数据
我有一个非常大的数据集,其中包含一个自变量 (Kpl) 和几千个因变量 (Y1,... Yi)。
例如,我想计算所有 Kpl Vs Yi 对的二次函数拟合的 AICc。
我测试了以下代码,并且在一些示例中运行良好
cor_data <- read.csv("R/data/experimental_data/kpl_1.csv")
Kpl <- as.matrix(cor_data[,1])
sapply(cor_data[,-1],function(x) AICc(nls(x ~ a*exp(b*Kpl),start = list(a=1,b=1),control=list(maxiter=1000))))
当我向原始文件中添加更多样本时,如果出现错误,则整个 sapply 循环停止并且不输出任何数据。我意识到某些模型将无法适合我正在尝试的方程,这很好,但是有没有办法强制 sapply 循环在错误发生后继续并给出实际执行的样本的结果工作?
如果它还可以打印出拟合失败的原因,则奖励,因为它可能是一系列不同的事情(低于 minfactor、高于 maxiter 或错误的起始值)。
解决方法
您可以使用 try-catch
或查看 tidyverse
中的 tidy-evaluation:
evalF <- function(x){
fit <- try(nls(x ~ a * exp(b * Kpl),start = list(a = 1,b = 1),control = list(maxiter = 1000)))
if(!inherits(fit,'try-error'))
AIC(fit)
else
NULL
}
sapply(cor_data[,-1],evalF)
如果您想打印错误消息,您可以简单地将 fit
而不是 NULL
或类似的 print
返回到控制台。出于格式化目的,请考虑在后一种情况下使用 warning(...)
函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。