[R] Function Help

cls59 chuck at sharpsteen.net
Mon Oct 12 02:28:51 CEST 2009




jimdare wrote:
> 
> Hi there,
> 
> I have created the function below:
> 
> pirate<-function(x){
> a<-x-1; b<-a/5; c<-a-b;
> d<-c-1; e<-d/5; f<-d-e;
> g<-f-1; h<-g/5; i<-g-h;
> j<-i-1; k<-j/5; l<-j-k;
> m<-l-1; n<-m/5; o<-m-n;
> final<-o/5;
> 
> final
> }
> 
> I want to run this function until the output ('final') is an exact integer
> (e.g. 893.00000 rather than 893.78332).  I then need to find out what
> value of X (input) resulted in this integer.  Could someone please help? 
> I am relatively inexperienced at creating functions.
> 
> Kind regards,
> James 
> 
> 


You could approach this problem by setting it up as an optimization problem
where the task is to guess the value of x such that the squared difference
between pirate(x) and your target value is minimized. The difference is
squared in order to ensure the optimizer attempts to drive the difference to
0 instead of -infinity. A function that calculates the squared difference
between any function evaluated at a point x and some target value is:

sqDiff <- function( x, funObj, target ){

  return( ( target - funObj(x) )^2 )

}

You can then use R's nlm() function in an attempt to discover the value of x
that results in your target value of 893. This requires specifying an
initial guess p:

nlm( sqDiff, p = 5000, funObj = pirate, target = 893 )

$minimum
[1] 1.996023e-07

$estimate
[1] 13634.3

$gradient
[1] -3.72529e-14

$code
[1] 1

$iterations
[1] 3


The solver came up with an estimate of 13634.3 for x:

pirate( 13634.3 )
[1] 892.9996

Achieving a solution that provides the exact value of 893 is very unlikely
using numerical optimization since these techniques involve refining a
series of guesses until one of the guesses is "good enough"-- i.e. within
1*10^{-6} of your target value-- at which point the algorithm terminates.

To get an answer that provides the target number of 893 exactly you will
probably have to use a symbolic  solver-- the Ryacas or rSymPy packages
provide interfaces to computer algebra systems that may have the necessary
symbolic tools to help you here.

Good luck!

-Charlie

-----
Charlie Sharpsteen
Undergraduate
Environmental Resources Engineering
Humboldt State University
-- 
View this message in context: http://www.nabble.com/Function-Help-tp25848627p25849148.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list