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

Tiago Olivoto t|@goo||voto @end|ng |rom gm@||@com
Fri Dec 11 20:12:26 CET 2020


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]]



More information about the R-package-devel mailing list