Re: [R] Reconstruction of a "valid" expression within a function

From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>
Date: Fri 29 Apr 2005 - 07:31:46 EST

"Pascal Boisson" <Pascal.Boisson@scri.ac.uk> writes:

> Hello all,
>
> I have some trouble in reconstructing a valid expression within a
> function,
> here is my question.
>
> I am building a function :
>
> SUB<-function(DF,subset=TRUE) {
> #where DF is a data frame, with Var1, Var2, Fact1, Fact2, Fact3
> #and subset would be an expression, eg. Fact3 == 1
>
> #in a first time I want to build a subset from DF
> #I managed to, with an expression like eg. DF$Fact3,
> # but I would like to skip the DF$ for convenience
> # so I tried something like this :
>
> tabsub<-deparse(substitute(subset))
> dDF<-deparse(substitute(DF))
>
> if (tabsub[1]!="TRUE") {
> subset<-paste(dDF,"$",tabsub,sep="")}
>
> #At this point, I have a string that seems to be the expression that I
> want
> sDF<-subset(DF, subset)
> }
>
> #But I have an error message :
> >Error in r & !is.na(r) : operations are possible only for numeric or
> logical types
>
>
> I can not understand why is that, even after I've tried to convert
> properly the string into an expression.

No you haven't... You're passing a string to subset(). BTW, it would be easier to follow your code if it didn't use "subset" with two different meanings. At the very least you'd need to parse the subset expression and either eval() it and pass the result to subset(), or use substitute to insert it at the proper place and eval the whole enchillada.

But why? subset() does this stuff internally already:

> subset(airquality, Ozone < 10)

    Ozone Solar.R Wind Temp Month Day

9       8      19 20.1   61     5   9
11      7      NA  6.9   74     5  11
18      6      78 18.4   57     5  18
21      1       8  9.7   59     5  21
23      4      25  9.7   61     5  23
76      7      48 14.3   80     7  15
94      9      24 13.8   81     8   2
114     9      36 14.3   72     8  22
137     9      24 10.9   71     9  14
147     7      49 10.3   69     9  24

[look inside subset.data.frame for the code that accomplishes this]

> I've been all the day trying to sort that problem ...
> Maybe this attempt is ackward and I have not understood what is really
> behind an expression.
> But if anyone could give me a tip concerning this problem or point me to
> relevant references, I would really appreciate.

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907

______________________________________________
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
Received on Fri Apr 29 07:37:06 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:28 EST