【发布时间】:2020-06-25 18:28:53
【问题描述】:
我广泛使用属性我喜欢使用管道来设置它们。
我经常使用rlang::set_attrs,但从 rlang 0.3.0 开始,它已被弃用。
但是,对于这种弃用没有任何解释(在NEWS.md 上从未提及),而且这个函数的结构对我来说似乎真的无害:
> rlang::set_attrs
function (.x, ...)
{
warn_deprecated("`set_attrs()` is deprecated as of rlang 0.3.0")
if (!is_copyable(.x)) {
abort("`.x` is uncopyable: use `mut_attrs()` to change attributes in place")
}
set_attrs_impl(.x, ...)
}
<bytecode: 0x000001d759d6ecd8>
<environment: namespace:rlang>
> rlang:::set_attrs_impl
function (.x, ...)
{
attrs <- dots_list(...)
if (identical(attrs, set_attrs_null)) {
attributes(.x) <- NULL
}
else {
attributes(.x) <- c(attributes(.x), attrs)
}
.x
}
<bytecode: 0x000001d75d8f2128>
<environment: namespace:rlang>
这似乎与将它们设置在另一行相同,attr()。
我知道data.table::setattr,但它的行为并不完全相同,而且似乎不太适合管道。
最后,我应该避免使用rlang::set_attrs吗?如果是,我应该避免在具有相同目的的自定义函数中复制什么?
【问题讨论】:
-
magrittr::set_attr()和magrittr::set_attributes()怎么样?我不确定他们是否在他们的rlang同行之前就在那里(在这种情况下,这可能与弃用有关),但对于您的用例,它们看起来很合适
标签: r attributes pipe rlang