简体   繁体   中英

Function to assign a value in a new environment in R

I'm trying to write a function 'exported' in R that will assign a value to a name in a desired environment (say .GlobalEnv). I'd like to use the following syntax.

# desired semantics: x <- 60
exported(x) <- 60
# ok if quotes prove necessary.
exported("x") <- 60

I've tried several variations. Most basically:

`export<-` <- function(x, obj) {
  call <- as.list(match.call())
  elem <- as.character(call[[2]])
  assign(elem, obj, .GlobalEnv)
  get(elem, .GlobalEnv)
}
exported(x) <- 50

The foregoing gives an error about the last argument being unused. The following complains that "object 'x' is not found."

setGeneric("exported<-", function(object, ...) {
  standardGeneric("exported<-")
})

setReplaceMethod("exported", "ANY", function(object, func) {
  call <- as.list(match.call())
  name <- as.character(call$object)
  assign(name, func, other.env)
  assign(name, func, .GlobalEnv)
  get(name, .GlobalEnv)
})

exported(x) <- 50

The above approach using a character vector in place of a name yields "target of assignment expands to non-language object."

Is this possible in R?


EDIT: I would actually like to do more work inside 'exported.' Code was omitted for brevity. I also realize I can use do something like:

exported(name, func) {
  ...
}

but am interested in seeing if my syntax is possible.

I can't understand why you wouldn't use assign ?

assign( "x" , 60 , env = .GlobalEnv )
x
[1] 60

The env argument specifies the environment into which to assign the variable.

e <- new.env()
assign( "y" , 50 , env = e )
ls( env = e )
[1] "y"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM