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.sav...@univ-fcomte.fr <mailto:paul.sav...@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.coom...@gmail.com
     <mailto:kevin.r.coom...@gmail.com>>
     À: "r-package-devel" <r-package-devel@r-project.org
     <mailto:r-package-devel@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@r-project.org
     <mailto:R-package-devel@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@r-project.org
     <mailto:R-package-devel@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to