[R] ifelse help?

Petr PIKAL petr.pikal at precheza.cz
Tue Jan 20 09:59:39 CET 2009


r-help-bounces at r-project.org napsal dne 19.01.2009 21:08:59:

> Sorry I didn't give the proper initialization of j. But you are right j 
should
> also be an array of 5. So x[j + 5] would return 5 values. 
> 
> So if the array returned from 'ifelse' is the same dimention as test 
(h), then
> are all the values of h being tested? So since h as you say has no 
dimensions 
> is the test only testing h[1]? Again it seems that if all of the 
elements of h
> are tested (there are 5 elements) and each element produces an array of 
5 the 
> resulting array should be 25. 

No

> >     A vector of the same length and attributes (including class) as
> >     test and data values from the values of yes or no

Let make an experiment

h<-numeric(5)
h[2]<-1
h[5]<-1

so as 2 conditions are not met

set.seed(111)
j<-abs(rnorm(5)*50)
j <- floor(j)
ifelse(h == 0, x[j+2], 1:5)
[1]  13   2  17 117   5

Results in vector of 5 numbers as h is vector of 5 numbers

Items 1,3 and 4 are taken from corresponding positions in x[j+2]
items 2 and 5 from corresponding positions of 1:5

compare

h<-numeric(5)
ifelse(h == 0, x[j+2], 1:5)
[1]  13  18  17 117  10

If you want to have all elements (j+2) from x you can try use list

lll<-list(a=1:5, b=letters, c=32:48, d=rnorm(5), e=42)
ifelse(h == 0, lll, 1:5)

Regards
Petr


> 
> Kevin
> 
> ---- "Charles C. Berry" <cberry at tajo.ucsd.edu> wrote: 
> > On Mon, 19 Jan 2009, rkevinburton at charter.net wrote:
> > 
> > > I am having a hard time understanding what is happening with ifelse.
> > >
> > > Let me illustrate:
> > >
> > > h <- numeric(5)
> > > p <- 1:5
> > > j <- floor(j)
> > 
> > And j is 0:4 + epsilon , where 0 <= epsilon < 1, evidently.
> > 
> > > x <- 1:1000
> > > ifelse(h == 0, x[j+2], 1:5)
> > > [1] 2 3 4 5 6
> > >
> > > My question is, "shouldn't this be retruning 25 numbers?"
> > 
> > 
> > No. It should be
> > 
> >     A vector of the same length and attributes (including class) as
> >     test and data values from the values of yes or no
> > 
> > according to ?ifelse, and 'test' is what you have as 'h'
> > 
> > Consider
> > 
> > > z <- as.data.frame( diag(2 ) )
> > >  ifelse(z == 0, letters , 1:5)
> >       V1  V2
> > [1,] "1" "c"
> > [2,] "b" "4"
> > >
> > 
> > all args have different lengths and classes. But the result has those 
of 
> > the 'test' arg.
> > 
> > 
> > > It seems that the ifelse should check 5 values of h for zero. For 
each 
> > > of the 5 values I am thinking it should return an array of 5 (x[j+2] 
if 
> > > h[index] == 0). Since the dimension of h is 5 that would mean 25 
values.
> > 
> > h has no attributes, therefore no 'dimension'
> > 
> > HTH,
> > 
> > Chuck
> > 
> > > But that isn't what is being returned.Something about this that I 
don't 
> > > understand. Please help my ignorance.
> > >
> > > Thank you.
> > >
> > > Kevin
> > >
> > > ______________________________________________
> > > R-help at r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> > 
> > Charles C. Berry                            (858) 534-2098
> >                                              Dept of Family/Preventive 
Medicine
> > E mailto:cberry at tajo.ucsd.edu               UC San Diego
> > http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 
92093-0901
> > 
> >
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list