【发布时间】:2018-04-14 23:04:46
【问题描述】:
我知道“for 循环中的跳过错误”已被多次回答(请参阅How to skip an error in a loop 或Skip Error and Continue Function in R)。但是对于新手来说,所有答案都很复杂,很难应用于不同的情况。
我正在使用一段代码对 100 个数据集执行高斯直方图拟合。
results = list()
for(i in 1:length(T_files)){
R = Table[i][,1]
tab = data.frame(x = seq_along(R), r = R)
res = nls(R ~ k*exp(-1/2*(x-mu)^2/sigma^2), start=c(mu=15,sigma=5, k=1) , data = tab)
v = summary(res)$parameters[,"Estimate"]
fun = function(x) v[3]*exp(-1/2*(x-v[1])^2/v[2]^2)
results[[i]] = fun(seq(0, 308, 1))/max(fun_SP(seq(0, 308, 1)))/2
}
在对每个人进行测试时,该代码适用于大多数数据集。但是,循环不会并显示“nls(...) 中的错误:奇异梯度”消息。我想跳过这条消息并继续下一个数据集。
我知道可以使用tryCatch 函数,但是包含nls 函数的行很复杂,我还没有找到在该行中正确使用tryCatch 的方法。欢迎任何建议:-)
【问题讨论】:
-
我会尝试在 nls 调用上使用 tryCatch。所以将
res = nls(R ~ k*exp(-1/2*(x-mu)^2/sigma^2), start=c(mu=15,sigma=5, k=1) , data = tab)替换为tryCatch(res = nls(R ~ k*exp(-1/2*(x-mu)^2/sigma^2), start=c(mu=15,sigma=5, k=1) , data = tab), next)。我不知道这是否可行,因为我以前没有使用过 tryCatch,但值得一试