[R] applying uniroot function to each element in vector

Rolf Turner rolf.turner at xtra.co.nz
Thu Apr 28 00:35:24 CEST 2011

On 28/04/11 06:12, David Winsemius wrote:
> On Apr 27, 2011, at 11:54 AM, Dale wrote:
>> If I have a vector of n elements, e.g. a vector of length 4 with 
>> elements 10,
>> 20, 30, 40 and want to find the different values of x such that x^2=10,
>> x^2=20, x^30 and x^2=40, how could I do this in R? I'm thinking of 
>> using the
>> uniroot function, but am finding difficult applying it to a vector. 
>> Thanks
> I find myself scratching my head wondering why the answer is not:
> y=c(10,20,30,40)
> x=sqrt(y)
> x

My guess is that he really wants to solve foo(x) = y_i for each entry y_i of
some vector y, and that ``x^2'' was just an over-simplified version of foo()
(and c(10,20,30,40) was an over-simplified version of y).

I think that something like

     lapply(y,function(a){uniroot(function(t){foo(t) - a},lower=L,upper=U)})

(untested) might be what is wanted (for appropriately chosen values of L 
and U).

Things get more complicated if L and U need to be chosen differently for
each entry of y.


         Rolf Turner

More information about the R-help mailing list