Thanks Bert & Gabor for two very interesting solutions! It would be very handy in R if string1:stringN generated "string1","string2"..."stringN" it would make selections like this much more obvious. I know it's easy to with the colon operator and paste function but that's quite a step up in complexity compared to SAS' x1 x3-x4 y2 or SPSS' x1,x3 to x4, y2. And it's complexity that beginners face early in learning R.
While on the subject of the colon operator, why doesn't anscombe[[1:4]] select the x variables in list form as anscombe[,1:4] or anscombe[1:4] do in data frame form? Thanks, Bob ========================================================= Bob Muenchen (pronounced Min'-chen), Manager Statistical Consulting Center U of TN Office of Information Technology 200 Stokely Management Center, Knoxville, TN 37996-0520 Voice: (865) 974-5230 FAX: (865) 974-4810 Email: [EMAIL PROTECTED] Web: http://oit.utk.edu/scc, News: http://listserv.utk.edu/archives/statnews.html ========================================================= > -----Original Message----- > From: Bert Gunter [mailto:[EMAIL PROTECTED] > Sent: Sunday, August 26, 2007 6:50 PM > To: 'Gabor Grothendieck'; Muenchen, Robert A (Bob) > Cc: r-help@stat.math.ethz.ch > Subject: RE: [R] subset using noncontiguous variables by name (not > index) > > The problem is that "x3:x5" does not mean what you think it means. The > only > reason it does the right thing in subset() is because a clever trick is > used > there (read the code -- it's not hard to understand) to ensure that it > does. > Gabor has essentially mimicked that trick in his solution. > > However, it is not necessary do this. You can construct the call > directly as > you tried to do. Using the anscombe example, here's how: > > chooz <- "c(x1,x3:x4,y2)" ## enclose the desired expression in quotes > do.call (subset, list( x = anscombe, select = parse(text = chooz))) > > -- Bert Gunter > Genentech Non-Clinical Statistics > South San Francisco, CA > > "The business of the statistician is to catalyze the scientific > learning > process." - George E. P. Box > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On Behalf Of Gabor > > Grothendieck > > Sent: Sunday, August 26, 2007 2:10 PM > > To: Muenchen, Robert A (Bob) > > Cc: r-help@stat.math.ethz.ch > > Subject: Re: [R] subset using noncontiguous variables by name > > (not index) > > > > Using builtin data frame anscombe try this. First we set up a > > data frame > > anscombe.seq which has one row containing 1, 2, 3, ... . Then select > > out from that data frame and unlist it to get the desired > > index vector. > > > > > anscombe.seq <- replace(anscombe[1,], TRUE, seq_along(anscombe)) > > > idx <- unlist(subset(anscombe.seq, select = c(x1, x3:x4, y2))) > > > anscombe[idx] > > x1 x3 x4 y2 > > 1 10 10 8 9.14 > > 2 8 8 8 8.14 > > 3 13 13 8 8.74 > > 4 9 9 8 8.77 > > 5 11 11 8 9.26 > > 6 14 14 8 8.10 > > 7 6 6 8 6.13 > > 8 4 4 19 3.10 > > 9 12 12 8 9.13 > > 10 7 7 8 7.26 > > 11 5 5 8 4.74 > > > > > > On 8/26/07, Muenchen, Robert A (Bob) <[EMAIL PROTECTED]> wrote: > > > Hi All, > > > > > > I'm using the subset function to select a list of variables, some > of > > > which are contiguous in the data frame, and others of which > > are not. It > > > works fine when I use the form: > > > > > > subset(mydata,select=c(x1,x3:x5,x7) ) > > > > > > In reality, my list is far more complex. So I would like to > > store it in > > > a variable to substitute in for c(x1,x3:x5,x7) but cannot get it to > > > work. That use of the c function seems to violate R rules, > > so I'm not > > > sure how it works at all. A small simulation of the problem > > is below. > > > > > > If the variable names & orders were really this simple, I could use > > > indices like > > > > > > summary( mydata[ ,c(1,3:5,7) ] ) > > > > > > but alas, they are not. > > > > > > How does the c function work this way in the first place, > > and how can I > > > make this substitution? > > > > > > Thanks, > > > Bob > > > > > > mydata <- data.frame( > > > x1=c(1,2,3,4,5), > > > x2=c(1,2,3,4,5), > > > x3=c(1,2,3,4,5), > > > x4=c(1,2,3,4,5), > > > x5=c(1,2,3,4,5), > > > x6=c(1,2,3,4,5), > > > x7=c(1,2,3,4,5) > > > ) > > > mydata > > > > > > # This does what I want. > > > summary( > > > subset(mydata,select=c(x1,x3:x5,x7) ) > > > ) > > > > > > # Can I substitute myVars? > > > attach(mydata) > > > myVars1 <- c(x1,x3:x5,x7) > > > > > > # Not looking good! > > > myVars1 > > > > > > # This doesn't do the right thing. > > > summary( > > > subset(mydata,select=myVars1 ) > > > ) > > > > > > # Total desperation on this attempt: > > > myVars2 <- "x1,x3:x5,x7" > > > myVars2 > > > > > > # This doesn't work either. > > > summary( > > > subset(mydata,select=myVars2 ) > > > ) > > > > > > > > > > > > ========================================================= > > > Bob Muenchen (pronounced Min'-chen), Manager > > > Statistical Consulting Center > > > U of TN Office of Information Technology > > > 200 Stokely Management Center, Knoxville, TN 37996-0520 > > > Voice: (865) 974-5230 > > > FAX: (865) 974-4810 > > > Email: [EMAIL PROTECTED] > > > Web: http://oit.utk.edu/scc, > > > News: http://listserv.utk.edu/archives/statnews.html > > > > > > ______________________________________________ > > > R-help@stat.math.ethz.ch 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. > > > > > > > ______________________________________________ > > R-help@stat.math.ethz.ch 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. > > ______________________________________________ R-help@stat.math.ethz.ch 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.