在R中的新环境中分配值的函数

时间:2013-08-15 19:15:05

标签: r variable-assignment

我正在尝试在R中编写一个'exported'函数,它会为所需环境中的名称赋值(比如.GlobalEnv)。我想使用以下语法。

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

我尝试了几种变体。最基本的:

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

上述内容给出了关于最后一个未被使用的参数的错误。以下抱怨“找不到对象'x'。”

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

使用字符向量代替名称的上述方法会产生“赋值目标扩展为非语言对象。”

这可能在R?


编辑:我真的想在'导出'中做更多的工作。为简洁起见,省略了代码。我也意识到我可以使用类似的东西:

exported(name, func) {
  ...
}

但我很想知道我的语法是否可行。

1 个答案:

答案 0 :(得分:6)

我无法理解你为什么不使用assign

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

env参数指定要为其分配变量的环境。

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