[R-pkg-devel] Using ggplot2 within another package

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Thu Apr 22 23:27:49 CEST 2021


   For some reason that I don't remember, an R core member once told me 
that they prefer x <- y <- NULL to utils::globalVariables(c("x","y")) - 
although I have also encountered problems with that strategy in edge cases.

  Here's an example from StackOverflow from today where for some reason 
I don't understand, evaluation of function arguments interacts with 
non-standard/lazy evaluation within a dplyr function such that 'foo' 
works while 'x$foo' doesn't ... don't know if it's a similar case.

https://stackoverflow.com/questions/67218258/getting-error-error-in-usemethodfilter-no-applicable-method-for-filter/67220198#67220198

On 4/22/21 5:19 PM, Kevin R. Coombes wrote:
> Thanks.
> 
> Obviously, long. long ago, (in a galaxy not far enough away), Paul's
> suggestion of using "aes_string" was the correct one, since "aes" uses
> non-standard evaluation. (And to quote somebody from an R fortune
> cookie, "The problem with non-standard evaluation is that it is
> non-standard.") But teh documentation at the end oft he link provided by
> Robert explivityl tells you not to do that, since "aes_string is
> deprecated".  And reading more carefully into the manual page for
> aes_string, one does indeed find the statement that the function is
> "soft deprecated". I'm not sure what that means, other than someone on
> the development team doesn't like it.
> 
> Instead, the vignette says you should
>      importFrom("rlang", ".data")
> in your NAMESPACE, and write
>      ggplot(myData, aes(x = .data$myX, y = .data$myY))
> 
> And now my dinosaur question: That looks like using one non-standard
> hack to cover up the problems with another non-standard hack. Why the
> heck  is that any better for the developer than writing
>      ggplot(myData, aes(x = myData$myX, y = myData$myY))
> 
> or using Dirk Eddelbuettel's suggestion of calling utils::globalVariables ??
> 
> It's time to tell those kids to get off of my lawn.
>     Kevin
> 
> On 4/22/2021 4:45 PM, Robert M. Flight wrote:
>> Kevin,
>>
>> This vignette from ggplot2 itself gives the "officially recommended"
>> ways to avoid the warnings from R CMD check
>>
>> https://ggplot2.tidyverse.org/articles/ggplot2-in-packages.html
>> <https://ggplot2.tidyverse.org/articles/ggplot2-in-packages.html>
>>
>> Cheers,
>>
>> -Robert
>>
>> On Thu, Apr 22, 2021 at 4:39 PM Paul SAVARY
>> <paul.savary using univ-fcomte.fr <mailto:paul.savary using univ-fcomte.fr>> wrote:
>>
>>      Hi Kevin,
>>
>>      I was faced to the same problem and I used 'aes_string()' instead
>>      of 'aes()'. You can then just write the name of the columns
>>      containing the data to plot as character strings.
>>
>>      Example:
>>
>>      myPlot <- function(myData, ...) {
>>          # get ready
>>          ggplot(myData, aes_string(x = "myX", y = "myY")) +
>>             # add my decorations
>>             theme_bw()
>>      }
>>
>>      It is probably already the case for your function but you need to
>>      include #' @import ggplot2 in your function preamble (if I am not
>>      wrong).
>>
>>      Kind regards
>>      Paul
>>
>>      ----- Mail original -----
>>      De: "Kevin R. Coombes" <kevin.r.coombes using gmail.com
>>      <mailto:kevin.r.coombes using gmail.com>>
>>      À: "r-package-devel" <r-package-devel using r-project.org
>>      <mailto:r-package-devel using r-project.org>>
>>      Envoyé: Jeudi 22 Avril 2021 22:28:55
>>      Objet: [R-pkg-devel] Using ggplot2 within another package
>>
>>      Hi,
>>
>>      I'm trying to help clean up an R package for someone else to
>>      submit to
>>      CRAN. He has used ggplot2 to implement a plotting function for the
>>      kinds
>>      of things that his packages generates. His plotting routine basically
>>      looks like (after changing names to protect the innocent):
>>
>>      myPlot <- fucntion(myData, ...) {
>>          # get ready
>>          ggplot(myData, aes(x = myX, y = myY)) +
>>             # add my decorations
>>             theme_bw()
>>      }
>>
>>      Of course, "R CMD check --as-cran" complains that there is no global
>>      binding for "myX" or "myY" since they are columns defined in the
>>      data.frame "myData".
>>
>>      What is the best way to work around this issue?
>>
>>      Of course, dinosaurs like myself might be tempted to suggest just
>>      using
>>      plain old "plot", so I don't need to see those suggestions.
>>
>>      Do I just ignore the usual ggplot conventions and write "myData$myX"
>>      inside "aes"  in order to appease the CRAN checker? Or is there some
>>      tidy-er way to solve this problem?
>>
>>      Thanks,
>>         Kevin
>>
>>      ______________________________________________
>>      R-package-devel using r-project.org
>>      <mailto:R-package-devel using r-project.org> mailing list
>>      https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>      <https://stat.ethz.ch/mailman/listinfo/r-package-devel>
>>
>>      ______________________________________________
>>      R-package-devel using r-project.org
>>      <mailto:R-package-devel using r-project.org> mailing list
>>      https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>      <https://stat.ethz.ch/mailman/listinfo/r-package-devel>
>>
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list