[R] plotmath and logical operators?

MacQueen, Don m@cqueen1 @end|ng |rom ||n|@gov
Tue Aug 21 01:14:06 CEST 2018


Thanks Bert!

It certainly works for the example (and shows a much deeper understanding of eval, substitute, etc. than I have). But it doesn't appear to generalize very well in the way I need (which of course I didn't think of mentioning until after I sent the email -- sorry).

Suppose subs is any expression that would be valid for the subset argument of base::subset, for a given data frame. Then I can extract that subset of the data frame by using
   mydf[  with(mydf, eval(subs)) ,  ]
(or similar).

Then, having plotted some aspect of that subset, I want to annotate the plot with the subset specifications.

I've used this approach to  set up a system that helps me to interactively review various subsets of a large set of data. I save the final selected subsetting expressions in some sort of data structure, for later use in preparing a report using rmarkdown.

I was hoping to use plotmath to improve the appearance of the annotations -- but I now think it's not worth this kind of effort. I think I'm going to settle for mtext( as.character(subs) ).

-Don

--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
Lab cell 925-724-7509



From: Bert Gunter <bgunter.4567 using gmail.com>
Date: Monday, August 20, 2018 at 3:38 PM
To: "MacQueen, Don" <macqueen1 using llnl.gov>
Cc: array R-help <r-help using r-project.org>
Subject: Re: [R] plotmath and logical operators?

This is clumsy and probably subject to considerable improvement, but does it work for you:

left <- quote(x >= 3)
right <- quote(y <= 3) ## these can be anything

## the plot:
plot(1)
eval(substitute(mtext(expression(paste(left, " & ",right))), list(left = left, right = right)))

## Expression evaluation
eval(substitute(with(df,left & right), list(left = left, right = right)))
Cheers,
Bert


Bert Gunter

"The trouble with having an open mind is that people keep coming along and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Mon, Aug 20, 2018 at 2:00 PM MacQueen, Don via R-help <r-help using r-project.org<mailto:r-help using r-project.org>> wrote:
I would like to use plotmath to annotate a plot with an expression that includes a logical operator.

## works well
tmp <- expression(x >= 3)
plot(1)
mtext(tmp)

## not so well
tmp <- expression(x >= 3 &  y <= 3)
plot(1)
mtext(tmp)

Although the text that's displayed makes sense, it won't be obvious to my non-mathematical audience.

I'd appreciate suggestions.


I've found a work-around that gets the annotation to look right
  tmpw <- expression(paste( x >= 3, " & ", y <= 3) )
  plot(1)
  mtext(tmpw)


But it breaks my original purpose, illustrated by this example:

df <- data.frame(x=1:5, y=1:5)
tmp <- expression(x >= 3 & y <= 3)
tmpw <- expression(paste( x >= 3, " & ", y <= 3) )
with(df, eval(tmp))
[1] FALSE FALSE  TRUE FALSE FALSE
with(df, eval(tmpw))
[1] "FALSE  &  TRUE" "FALSE  &  TRUE" "TRUE  &  TRUE"  "TRUE  &  FALSE" "TRUE  &  FALSE"

Thanks
-Don

--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
Lab cell 925-724-7509



______________________________________________
R-help using r-project.org<mailto:R-help using r-project.org> mailing list -- To UNSUBSCRIBE and more, see
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.

	[[alternative HTML version deleted]]



More information about the R-help mailing list