[R] lapply() reccursively
David Winsemius
dwinsemius at comcast.net
Tue Oct 13 17:33:16 CEST 2009
On Oct 13, 2009, at 7:33 AM, Kaveh Vakili wrote:
>
> Hi all,
>
> I was wondering whether it is possible to use the lapply() function
> to alter the value of the input, something in the spirit of :
>
> a1<-runif(100)
> a2<-function(i){
> a1[i]<-a1[i-1]*a1[i];a1[i]
> }
> a3<-lapply(2:100,a2)
Neither a1 nor 2:100 are lists, so it would seem that sapply would be
more appropriate.
>
> Something akin to a for() loop, but using the lapply() infrastructure.
> I haven't been able to get rapply() to do this.
You did not specify what the correct answer should look like, but I
get no error after changing the "l" to an "s" and the output is a
vector rather than a list. I got no error with the lapply version so
it remains unclear what problem you are experiencing.
> a1<-runif(100)
> a2<-function(i){
+ a1[i]<-a1[i-1]*a1[i];a1[i]
+ }
> a3<-sapply(2:100,a2)
> a3
[1] 2.990506e-01 2.957213e-02 3.343994e-02 7.234998e-01 2.036053e-01
1.850228e-01 2.355974e-01 3.295134e-01
[9] 3.206837e-01 1.073884e-02 1.121334e-02 1.368814e-01 1.381827e-01
3.426581e-01 3.683766e-01 2.096506e-01
snipped
>
> The reason is that the "real" a2 function is a difficult function
> that only needs to be evaluated if the value of a1[i-1] meets some
> criteria.
Then maybe you should only apply it when those criteria are met?
>
> Thanks in advance,
>
> ______________________________________________
--
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list