通过引用从函数内分配环境对象的属性

时间:2017-11-24 16:59:31

标签: r attributes assign

这是一个简化的例子:

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"

我在环境var中有一个变量e,其变量属性为attrib。现在我有一个函数assign_new_attrib,它接受​​一个对象并为其赋予一个新属性attrib。如您所见,上面的代码导致错误&#34; object&#39; obj&#39;找不到&#34;由于<<-无法从函数中解析变量这一事实。

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

1 个答案:

答案 0 :(得分:1)

来自comments by nicola

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

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