[R] Confusing piece of R code

Sarah Goslee sarah.goslee at gmail.com
Sat Jul 9 23:17:19 CEST 2011

The neat thing about R is that it's interpreted, so you can look for yourself.

On Sat, Jul 9, 2011 at 3:46 PM, Bazman76 <h_a_patience at hotmail.com> wrote:
> m0<-epxression((4*theta1*theta2-theta3^2)/(2*x*theta3^2)-0.5*theta1*x)
> params<-all.vars(m0)                              this reads all the params
> from m0 so theta1,2 and 3 correct?

> m0<-expression((4*theta1*theta2-theta3^2)/(2*x*theta3^2)-0.5*theta1*x)
> params<-all.vars(m0)
> params
[1] "theta1" "theta2" "theta3" "x"

So no, not just the thetas but also x

> params<-params[-which(params=="x")]      checks which params are multiplied
> by x?

> params<-params[-which(params=="x")]
> params
[1] "theta1" "theta2" "theta3"

Nope, see that it takes out the params that are not equal to x. You
could look at, for instance ?which to figure that out, and also ?"=="

> np<-length(params)
> for(i in 1:6){
> esp<-get(sprintf("m%d",i-1))                    what does get do? sprinf
> formats strings? so what is it doinf here?

Again, you can try it.

> i <- 1
> sprintf("m%d",i-1)
[1] "m0"

So it's taking the value of i, and combining it with some other things
to make a character name. get() will get the R object with that name
and assign it to esp
?get will tell you that.

> assign(sprintf("m%d",i),D(esp,"x"))             what doeas assign so what in
> sprintf doing and what does D do?
> }

Same thing in reverse. I'll leave this one as an exercise for the querent.


> really really confused?

Learning to try things and to read the help are the only cure.


Sarah Goslee

More information about the R-help mailing list