[R] help with formula and data= argument
baptiste auguie
ba208 at exeter.ac.uk
Sun Apr 5 12:33:29 CEST 2009
Hi,
It seems to me that you could write a generic function myplot() and
have different methods for each class of object (like plot does).
Either S3 or S4 classes would do I think. Then it is only a matter of
making each method work separately. In particular, the method for a
formula could contain the with(data, ) construct to make all the
variables accessible to the text() function.
HTH,
baptiste
On 4 Apr 2009, at 23:27, Derek Ogle wrote:
> Sorry for posting this twice, but I still have not solved this problem
> and am hoping for some assistance.
>
>
>
> I am attempting to write a function that is flexible enough to respond
> to the user providing a formula (with a data= argument) or not
> (similar
> to plot(x,y) versus plot(y~x,data=data)). I have found a method to
> work
> with this in a simple case but am having trouble determining how to
> "find" a variable from within the data= argument that is not part of
> the
> formula. The following code illustrates (I know that
> plotrix::thigmophobe.labels() does what this function does) my problem
> ...
>
>
>
>
>
> myplot <- function(x,y=NULL,data=NULL,label=NULL) {
>
> if (class(x)=="formula") {
>
> mf <- model.frame(x,data=data)
>
> x <- mf[,2]
>
> y <- mf[,1]
>
> }
>
> if (is.null(y)) stop("Y-axis variable is missing")
>
> plot(x,y)
>
> if (!is.null(label)) text(x,y,label)
>
> }
>
>
>
> # dummy data
>
> df <-
> data
> .frame(x=runif(10),y=runif(10),grp=factor(rep(c("Yes","No"),each=5))
> )
>
>
>
> # both calls work as expected
>
> with(df,myplot(x,y))
>
> myplot(y~x,data=df)
>
>
>
> # only first works as I would hope
>
> with(df,myplot(x,y,label=grp))
>
> myplot(y~x,data=df,label=grp)
>
>
>
> # this works but is clumsy
>
> myplot(y~x,data=df,label=df$grp)
>
>
>
>
>
> Any help with how to make this function recognize the "grp" variable
> in
> "df" when using the formula without having to type "df$grp" when
> supplying it to the "label=" argument would be greatly appreciated.
> Thank you in advance.
>
>
>
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
_____________________________
Baptiste Auguié
School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK
Phone: +44 1392 264187
http://newton.ex.ac.uk/research/emag
More information about the R-help
mailing list