我通过以下方式从包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作为返回值。
答案 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