[R] R question
Faheem Mitha
faheem at email.unc.edu
Thu Dec 16 21:19:21 CET 1999
Dear Dr. Ihaka, Thank you for your reply. The example below was merely an
example. The reality is more complex. I have a function called h which
takes a scalar argument and returns an lm object. In the loop I was hoping
h(l[i]) would be interpreted as h of the scalar argument, but instead I
get:
Error in h(l[i]) : Object "l" not found
I will probably give up on this method for the time being, and try another
method, since I pressed for time.
My failed script is below in case anybody is willing to take a look.
Sincerely, Faheem Mitha.
*************************************************************************************
#I'm regressing the variable sal against some other variables (sallag,fresh,per,yr)
#This script is to use the method of constructed variables to get a
#transformation h from a family indexed by a parameter lambda such that
#the model h(sal) ~ other variables maximises the likelihood over all such
#h.
salinity <-read.table('salinity1.d')
attach(salinity)
# sal, fresh, per, yr all vectors of same length
yr <- yr - 1971
#saldot geometric mean of elements of sal vector
saldot<- exp((1/length(sal))*log(prod(sal)))
w0 <- saldot*log(sal)*( 0.5*log(sal) - log(saldot) )
h0 <- saldot*log(sal)
trans0<-lm(h0 ~ w0+sallag+fresh+per+yr)
summary(trans0)
dffits(trans0)
dfbetas(trans0)
l1 <- - coef(trans0)[2]
#Define functions h and w for recursion (both functions of lambda)
h <- function(l)
{
x <- (sal^l - 1)/( l*(saldot)^(l-1) )
x
}
w <- function(l)
{
x <- ( (sal^l)*log(sal) - (sal^l - 1)*( (1/l) + log(saldot) ))/
( l*(saldot)^(l-1) )
x
}
# Here is the for loop
for(i in 1:8){trans[i]<-lm( h(l[i]) ~ w(l[i])+sallag+fresh+per+yr)
l[i+1] <- l[i] - coef(trans[i])[2]}
#Trying to make the for loop equivalent to the set of statements below
trans1<-lm( h(l1) ~ w(l1)+sallag+fresh+per+yr)
l2 <- l1 - coef(trans1)[2]
trans2<-lm( h(l2) ~ w(l2)+sallag+fresh+per+yr)
l3 <- l2 - coef(trans2)[2]
trans3<-lm( h(l3) ~ w(l3)+sallag+fresh+per+yr)
l4 <- l3 - coef(trans3)[2]
trans4<-lm( h(l4) ~ w(l4)+sallag+fresh+per+yr)
l5 <- l4 - coef(trans4)[2]
trans5<-lm( h(l5) ~ w(l5)+sallag+fresh+per+yr)
l6 <- l5 - coef(trans5)[2]
trans6<-lm( h(l6) ~ w(l6)+sallag+fresh+per+yr)
l7 <- l6 - coef(trans6)[2]
trans7<-lm( h(l7) ~ w(l7)+sallag+fresh+per+yr)
l8 <- l7 - coef(trans7)[2]
#Now try usual regression with h_{\lambda}(y) for \lambda = l8
trans <- lm(h(l[10]) ~ sallag+fresh+per+yr)
*************************************************************************************
On Fri, 17 Dec 1999, Ross Ihaka wrote:
> On Thu, Dec 16, 1999 at 02:41:25PM -0500, Faheem Mitha wrote:
> > I have the following question, which is elementary but I am unable to
> > answer.
> > In a for(i=10) loop, I am trying to represent the 10 1-dimensional vectors
> > l1, l2,... l10 by some expression that will run through these values.
> > ie. soppose I want to add l1 + ... + l10
> > I could go
> >
> > x <- 0
> > for(i in 1:10){ x <- x+ l(i)}
> >
> > This should return x to be the sum of the 10 li's for i from 1 to 10
> > except of course I'm doing something more complicated.
> > But l(i) of course does not serve to represent l1 etc? What should I do?
>
> Subsetting in S (and hence R) uses [] for subsetting. What you need is
>
> x <- 0
> for(i in 1:10) x <- x + l[i]
>
> (If the values are really in a vector, x <- sum(l) is rather faster).
>
> Ross
>
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list