是的,您可以setattr
从data.table
包装中使用
library(data.table)
(setattr(my_df, "row.names", c("a", "b", "c")))
X1 X2 X3
a 1 4 7
b 2 5 8
c 3 6 9
事实上,对象是就地修改的(这对大对象很有帮助——无需复制对象)。您可以将其用于几乎任何属性。
请注意,setattr
以不可见的方式返回对象。
重要警告:
与 不同setNames
的是,data.table 函数setnames
并setattr
修改它们被调用的对象。如果您打算分配给一个新对象,您需要使用以下命令创建一个副本copy
:
如果您在不知不觉中尝试new_df <- setattr(my_df, "row.names", c("a", "b", "c"))
,那么两者new_df
和my_df
将具有相同的值
在这种情况下,您需要使用copy(my_df)
:
new_df <- setattr(copy(my_df), "row.names", c("a", "b", "c"))
但是,如果您的目标是“重新分配”回my_df
,那么您可以节省一些击键次数:
## instead of
my_df <- setattr(my_df, "row.names", c("a", "b", "c"))
## you can simply execute
setattr(my_df, "row.names", c("a", "b", "c"))