[R-pkg-devel] Using ggplot2 within another package
Ben Bolker
bbo|ker @end|ng |rom gm@||@com
Sun Apr 25 00:34:17 CEST 2021
It seems that what we need is really ignoreLocalVariables() rather
than globalVariables() ... ?
On 4/24/21 4:56 PM, Bill Dunlap wrote:
> Has there been any thought given to an alternative to globalVariables
> that would flag certain arguments to certain functions as being
> evaluated in a non-standard way. E.g.,
> usesNSE(FUN="with.default", ARGUMENTS="expr")
> usesNSE(FUN="lm", ARGUMENTS=c("weights","subset","offset"))
> usesNSE(FUN="~") # missing ARGUMENTS means all args are NSE
> This information would be stored in the environment that contains FUN.
>
> -Bill
>
> On Sat, Apr 24, 2021 at 6:18 AM Martin Maechler
> <maechler using stat.math.ethz.ch <mailto:maechler using stat.math.ethz.ch>> wrote:
>
> >>>>> Ben Bolker
> >>>>> on Thu, 22 Apr 2021 17:27:49 -0400 writes:
>
> > 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")) -
>
> That could have been me. Even though I think I still have some
> globalVariables() statements in some of my package sources, I've
> decided that it *harms* really, notably for relatively common
> variable names such
> as "x": It declares them "global"
> { for the purpose of codetools::globalVariables() } everywhere,
> i.e. for all functions in the package namespace and that
> basically kills the reliability of globalVariables() checking
> for the whole package.
>
>
> > although I have also encountered problems with that strategy
> in edge cases.
>
> well, when?
Honestly, I don't remember. Something with order of evaluation and
the fact that a variable existed and was set to NULL in the package
namespace screwing things up.
>
> > 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
> <https://stackoverflow.com/questions/67218258/getting-error-error-in-usemethodfilter-no-applicable-method-for-filter/67220198#67220198>
>
>
> { ceterum censeo ... to use NSE (non-standard-evaluation) for
> user convenience and to call this (together with really good
> ideas) "tidy" has been one of the biggest euphemisms in the
> history of
> statistical computing ... but yes, that's just my personal opinon }
>
> > 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>
> >>>
> <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>
> <mailto: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>
> >>> <mailto: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>
> >>> <mailto: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>
> >>> <mailto: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>
> >>> <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>
> >>> <mailto: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>
> >>> <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
> <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>
>
> ______________________________________________
> 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>
>
More information about the R-package-devel
mailing list