[R-pkg-devel] Assigning a variable to global environment
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 at 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 at sund.ku.dk>
escreveu:
On 11 Dec 2020, at 18:32, Tiago Olivoto <tiagoolivoto at 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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel