2017-02-23 50 views
0

在我的平分算法中,它说有一个“缺少值,其中需要真/假”,并指向此行:Bisection方法返回“缺少值,其中需要真假”,无法复制错误

if (sign(f(c)) == sign(f(a)) ) { 
    a <- c 

} 

为什么?这条线没什么问题,如果我手动复制它,它工作得很好。然而,当我运行该函数,它产生

Error in if (sign(f(c)) == sign(f(a))) { : 
missing value where TRUE/FALSE needed 

编辑:完整代码是

Bisection <- function(f, a,b, tol = 0.005, maxiter = 1000) { 
i <- 1 
while (i < maxiter) { 
c <- (a+b)/2 
if (f(c) == 0 | (b-a)/2 < tol) { return(c)} 
i <- i + 1 
if (sign(f(c)) == sign(f(a)) ) { 
    a <- c 

} 
else {b <- c}} 
return(NA) 

}

始终,0和100被用作a和b。

我在不同的函数f上调用这个函数,除了不同的参数,它们是相同的,它仅适用于平分函数失败的一个非常特殊的参数。对于所有其他参数,二等分功能正常工作。

+1

在你的问题中加入'f','c'和'a'。 – nrussell

+0

将'f','c'和'a'所有参数传递给你的函数吗?你如何调用函数? – Gregor

回答

0

通常,missing value where TRUE/FALSE needed装置R被遇到NA值 - 在这种情况下,我希望在任一ac,或任何f()回报这些值的NA值。

可能是因为手动运行这些行时,存储在全局环境中的值为ac就好(非缺失),但无论传递到您的函数(或其中计算)的值包含缺少值。我建议检查一下。