[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[1]=x1
> 	i=1
> 	while ( f(x[i])!=0 ) {
> 		i=i+1
> 		if (i==2) {
> 			x[2]=x[1]-f(x[1])*(x[1]-x0)/(f(x[1])-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 addition: Warning message:
> 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 
about it.)

Duncan Murdoch



More information about the R-help mailing list