Skip to content

R question

4 messages · Ross Ihaka, Faheem Mitha, Peter Malewski

#
On Thu, Dec 16, 1999 at 02:41:25PM -0500, Faheem Mitha wrote:
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
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?

                                    Faheem Mitha,


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
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:

            
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Dear Faheem
Faheem Mitha wrote:

            
"()" indictes that a function is called.  You can use a expression like
(get(paste( ... ))
[1]  3  4  5  6  7  8  9 10 11 12
 [1]  3  4  5  6  7  8  9 10 11 12
 [1]  3  4  5  6  7  8  9 10 11 12


A better way might be a Data.frame / matrix representation:
Vec1 Vec2 Vec3
1     3    3    3
2     4    4    4
3     5    5    5
4     6    6    6
5     7    7    7
6     8    8    8
7     9    9    9
8    10   10   10
9    11   11   11
10   12   12   12
??? Perhaps this includes a useful idea:
Vec1 Vec2 Vec3
  57   57   57

or:
Vec1 Vec2 Vec3
  57   57   57


Hope this answer will help a bit
Peter
--
** To YOU I'm an atheist; to God, I'm the Loyal Opposition. Woody Allen **
P.Malewski                                      Tel.: 0531 500965
Maschplatz 8                                    Email: P.Malewski at tu-bs.de
************************38114 Braunschweig********************************



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._