如何判断uniroot.all是否找不到根

时间:2017-09-25 06:26:23

标签: r

我通过以下方式从包uniroot.all运行rootSolve

All <- uniroot.all(fun, c(0, 1))

对于我的等式通常给我两个根源:

All
[1] 0.1000000 0.9732628

有时没有根,但我怎样才能测试R中的下一行结果呢?结果如下:

numeric(0)

is.nan (全部)和 is.null (全部)返回FALSE。我试着看man page 并且没有看到任何关于是否已找到根或发现根数的旗帜的提及。在这种情况下,我希望将NULL作为返回值。

2 个答案:

答案 0 :(得分:2)

标准方法是检查返回的根向量是否长度为零,如@ zx8754所示。请注意,将length(All)强制转换为逻辑而非明确计算与0的比较是最快的。

if(!length(All)) {
  #handle case when uniroot.all finds no roots
}

答案 1 :(得分:2)

检查返回的根向量的长度。这是可重现的示例

扎根于此:

> sinc <- function(x) ifelse(x == 0, 1, sin(x)/x)

0到1之间没有:

> v = uniroot.all(sinc, c(0,1))
> v
numeric(0)

测试时间:

> length(v)
[1] 0

扩展并且有负载:

> v = uniroot.all(sinc, c(0,100))
> length(v)
[1] 31