[R-pkg-devel] Assigning a variable to global environment

Mark Miller m@rk@rom@n@m|||er @end|ng |rom gm@||@com
Fri Dec 11 20:22:14 CET 2020


Correct me if I'm wrong, but this seems to be the purpose of the function
`with`?

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/with

If that's the feature you're looking for, it would be the case of informing
your users to use that function when they want to refer to the columns
without the $.

On Fri, Dec 11, 2020 at 11:13 AM Tiago Olivoto <tiagoolivoto using gmail.com>
wrote:

> Thanks, everyone,
>
> Following Mark suggestion:
>
> The problem I'm trying to solve is:
> Users of my package metan (https://CRAN.R-project.org/package=metan),
> sometimes need to extract 2-3 variables from a given data.frame and put
> them as vectors in the global environment to use in other package's
> functions.
> Given that df has the columns, ENV, GEN, REP, I would need to run the
> following codes
> ENV <- df$ENV
> GEN <- df$GEN
> REP <- df$GEN
> I'm looking for a more efficient way to do that and just finished the
> following function
>
> as_vector <- function(.data, ...){
>   if(missing(...)){
>     df <- select(.data, everything())
>   } else{
>     df <- select(.data, ...)
>   }
>   for(i in 1:ncol(df)){
>     var_name <- names(df[i])
>     var_name <- ifelse(exists(var_name, envir = .GlobalEnv),
>                          paste(var_name, "_vct", sep = ""),
>                          var_name)
>     assign(var_name, as.vector(df[[i]]), envir = .GlobalEnv)
>   }
> }
>
> Then, users could simply run as_vector(df) or  as_vector(df, GEN, ENV)
> But I'm not sure if this fits with the CRAN policies.
> Cherss,
> Tiago
>
> Em sex., 11 de dez. de 2020 às 16:03, Ben Bolker <bbolker using gmail.com>
> escreveu:
>
> >    I think this solution will *not* be acceptable to CRAN. (The policy
> > doesn't say "don't modify the global workspace unless you're careful",
> > it says "don't modify the global workspace".)  You can ask for an
> > exception, but your chances of success are very low.
> >
> >     It would be best to find a way to solve your problem without
> > assigning to the global workspace.  Can you assign to an environment
> > that is contained within your package, which all of the functions in
> > your package will also have access to?
> >
> >    cheers
> >      Ben Bolker
> >
> > On 12/11/20 1:52 PM, Tiago Olivoto wrote:
> > > Thank Matt for your response.
> > > Would be an acceptable solution to check if the variable exists first
> and
> > > creating the new variable with a suffix? Please, see the following
> > example
> > >
> > >      var_name <-  "name"
> > >      var_name <- ifelse(exists(var_name),
> > >                           paste(var_name, "_vct", sep = ""),
> > >                           var_name)
> > > and then
> > >
> > > assign(var_name, 1, envir = .GlobalEnv)
> > >
> > > Cheers,
> > > Tiago
> > >
> > > Em sex., 11 de dez. de 2020 às 15:20, Matt Denwood <md using sund.ku.dk>
> > escreveu:
> > >
> > >>
> > >>> On 11 Dec 2020, at 18:32, Tiago Olivoto <tiagoolivoto using gmail.com>
> > wrote:
> > >>>
> > >>> Hi everyone,
> > >>> This can be a very simple question, but I really have the following
> > >> doubt.
> > >>>
> > >>> CRAN Policies says that 'Packages should not modify the global
> > >> environment
> > >>> (user’s workspace)'. So, may I or may I not create a function that
> will
> > >>> call internally the following code? (a simple example)
> > >>>
> > >>> assign("name", 1, envir = .GlobalEnv)
> > >>
> > >> You may not - and for good reason, as the user may have an existing
> > >> variable called “name” that will be destroyed by such an action.  If
> you
> > >> run "R CMD check —as-cran" on a package containing this code you will
> > get a
> > >> warning (or maybe a note, I can’t remember), and the package would
> most
> > >> likely be refused if you tried to submit it to CRAN.
> > >>
> > >> Cheers,
> > >>
> > >> Matt
> > >>
> > >>
> > >>>
> > >>> Cheers
> > >>> Tiago
> > >>>
> > >>>        [[alternative HTML version deleted]]
> > >>>
> > >>> ______________________________________________
> > >>> R-package-devel using r-project.org mailing list
> > >>>
> > >>
> >
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-package-devel&data=04%7C01%7Cmd%40sund.ku.dk%7C42392098d3324de389b008d89dfad39d%7Ca3927f91cda14696af898c9f1ceffa91%7C0%7C0%7C637433048371869663%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=NFTbsJDlZNQWajN%2F%2BeftuclrkJSGtTnM9kEtobn9VLs%3D&reserved=0
> > >>
> > >>
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-package-devel using r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-package-devel
> > >
> >
> > ______________________________________________
> > R-package-devel using r-project.org mailing list
> > 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
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list