# [R] how to see what's wrong with a self written function?

Duncan Murdoch murdoch.duncan at gmail.com
Tue Dec 21 21:39:35 CET 2010

```On 21/12/2010 2:39 PM, casperyc wrote:
> Hi all,
>
> I am writing a simple function to implement regularfalsi (secant) method.
>
> ###################################################
> regulafalsi=function(f,x0,x1){
> 	x=c()
> 	x=x1
> 	i=1
> 	while ( f(x[i])!=0 ) {
> 		i=i+1
> 		if (i==2) {
> 			x=x-f(x)*(x-x0)/(f(x)-f(x0))
> 		} else {
> 			x[i]=x[i-1]-f(x[i-1])*(x[i-1]-x[i-2])/(f(x[i-1])-f(x[i-2]))
> 		}
> 	}
> 	x[i]
> }
> ###################################################
>
> These work fine,
> regulafalsi(function(x) x^(1/2)+3*log(x)-5,1,10)
> regulafalsi(function(x) x^(1/2)+3*log(x)-5,10,1)
>
> For all x>0, the function is strictly increasing.
>
> Then
>
> regulafalsi(function(x) x^(1/2)+3*log(x)-5,1,100)
>
> Error in while (f(x[i]) != 0) { : missing value where TRUE/FALSE needed
> In log(x) : NaNs produced
>
> I dont know what happened there, is there a way to find the value for
> f(x[i])
> that R can't determine TRUE/FALSE?

The easiest is to just use regular old-fashioned debugging methods, i.e.
insert print() or cat() statements into your function.  You could also
try debug(regulafalsi) and single step through it to see where things go
wrong.  (An obvious guess is that one of the values being passed to f is
negative, but you'll have to figure out why that happened and what to do