在R中使用nls2 :: nls2时无法抑制警告或消息

问题描述 投票:3回答:2

我正在尝试将约100个数据集拟合为三指数衰减公式,而这些数据通常不太适合。很好,但是我似乎无法抑制由此产生的大量警告。由于这是markdown脚本的一部分,最后,我得到了重复警告消息的页面和页面。

这里是我的数据示例,我将其命名为DF

structure(list(Time_min = c(19, 34, 49, 64, 94, 124, 154, 184, 
214, 244, 304), Concentration = c(477.08, 284.26, 189.16, 134.66, 
74.32, 53.04, 28.16, 16.78, 9.24, 8.7, 4.42)), row.names = c(NA, 
-11L), class = "data.frame")

这是我尝试过的示例:

StartGuess <- data.frame(A = c(100, 500),
                         alpha = c(0.01, 0.5),
                         B = c(100, 500),
                         beta = c(0.001, 0.05),
                         G = c(10, 100),
                         gamma = c(0.0001, 0.01))

suppressMessages(nls2::nls2(Concentration ~ A * exp(-alpha * Time_min) +
                            B * exp(-beta * Time_min) +
                            G * exp(-gamma * Time_min), 
                      data = DF, start = StartGuess))

suppressWarnings(nls2::nls2(Concentration ~ A * exp(-alpha * Time_min) +
                            B * exp(-beta * Time_min) +
                            G * exp(-gamma * Time_min), 
                      data = DF, start = StartGuess))


suppressWarnings(
      suppressMessages(nls2::nls2(Concentration ~ A * exp(-alpha * Time_min) +
                                  B * exp(-beta * Time_min) +
                                  G * exp(-gamma * Time_min), 
                            data = DF, start = StartGuess)))

无论我如何尝试抑制事物,我都会看到loooooooonnnnnggg错误列表,例如:

Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model
Error in (function (formula, data = parent.frame(), start, control = nls.control(),  : 
  singular gradient

要清楚,我期望消息和错误,因为我知道我经常缺乏足够的数据来充分描述三指数衰减,但是应该有some方式来抑制所有这些警告,不是吗

r suppress-warnings nls error-suppression
2个回答
2
投票
cc <- capture.output(type="message", res <- try(nls2::nls2(Concentration ~ A * exp(-alpha * Time_min) + B * exp(-beta * Time_min) + G * exp(-gamma * Time_min), data = DF, start = StartGuess), silent=TRUE) )

在这种情况下,res最终成为类型为try-error的对象:您可以检测到这一点并通过测试if (inherits(res,"try-error")) ...来执行所需的操作>

[1] "Error in result[[which.min(ss)]] : \n  attempt to select less than one element in get1index\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in result[[which.min(ss)]]: attempt to select less than one element in get1index>

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.