【发布时间】:2016-06-03 10:43:03
【问题描述】:
我想在 data.table 中添加一列。但是这个新列的名称必须从字符向量中提取。我写这个:
add_var=function(index){
label=c("products","price")
var_name=label[index]
df=data.frame(x=c(1,2,5,9),y=c(5,2,6,7))
dt=as.data.table(df)
dt[,(as.name(var_name)):=5]
return(dt)
}
new_ds=add_var(1)
我期待类似的东西
x y products
1 5 5
2 2 5
5 6 5
9 7 5
但是,相反,我收到了这条错误消息:
Error in `[.data.table`(dt, , `:=`((as.name(var_name)), 5)) :
LHS of := must be a symbol, or an atomic vector (column names or positions).
有人知道如何修复我的功能以使其正常工作吗?
【问题讨论】:
-
不要在那里使用
as.name。:=需要 LHS 上的字符向量。另外,您可以直接使用data.table构造一个data.table。最后,调用函数后第一次使用return(dt[])到ensure the data.table is printed。 -
另外,
setDT(df)比dt=as.data.table(df)更节省内存并且速度更快
标签: r string function data.table