【发布时间】: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。如您所见,由于<<- 无法从函数内解析变量,上述代码导致错误“object 'obj' not found”。
如何定义函数assign_new_attrib() 以通过引用分配新属性?
【问题讨论】:
-
使用
-
如果不清楚:
attr(e$var, 'attrib')的最终结果应该是'some.new.attrib'。 -
如果您想通过引用更改属性,请参阅
data.table中的setattr函数。试试assign_new_attrib_DT <- function(obj) data.table::setattr(obj, 'attrib', 'some.new.attrib')。 -
@nicola,这是一个很好的答案。不知道你为什么把它作为评论。我一定会接受的!
data.table是一个非常常见的包,data.table::setattr()适用于任何对象。
标签: r attributes assign