【问题标题】:Assigning attribute of environment object from within function by reference通过引用从函数内部分配环境对象的属性
【发布时间】:2017-11-24 16:59:30
【问题描述】:

这是一个简化的例子:

e <- new.env()
e$var <- 'some.val'
attr(e$var, 'attrib') <- 'some.attrib' 
attr(e$var, 'attrib')
#[1] "some.attrib"

assign_new_attrib <- function(obj) {
   attr(obj, 'attrib') <<- 'some.new.attrib'
}

assign_new_attrib(e$var)
#Error in attr(obj, "attrib") <<- "some.new.attrib" : 
#  object 'obj' not found
attr(e$var, 'attrib')
#[1] "some.attrib"

我在环境e 中有一个变量var,它有一个属性attrib。现在我有一个函数assign_new_attrib,它接受一个对象并为其分配一个新属性attrib。如您所见,由于&lt;&lt;- 无法从函数内解析变量,上述代码导致错误“object 'obj' not found”。

如何定义函数assign_new_attrib() 以通过引用分配新属性?

【问题讨论】:

  • 使用
  • 如果不清楚:attr(e$var, 'attrib') 的最终结果应该是'some.new.attrib'
  • 如果您想通过引用更改属性,请参阅data.table 中的setattr 函数。试试assign_new_attrib_DT &lt;- function(obj) data.table::setattr(obj, 'attrib', 'some.new.attrib')
  • @nicola,这是一个很好的答案。不知道你为什么把它作为评论。我一定会接受的! data.table 是一个非常常见的包,data.table::setattr() 适用于任何对象。

标签: r attributes assign


【解决方案1】:

来自comments by nicola

如果您想通过引用更改属性,请参阅data.table 中的setattr 函数。试试:

assign_new_attrib_DT <- function(obj) data.table::setattr(obj, 'attrib', 'some.new.attrib')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2021-04-07
    • 2014-07-16
    • 2016-03-31
    • 2011-09-22
    相关资源
    最近更新 更多