Ich möchte eine Spalte zu einer data.table hinzufügen. Der Name dieser neuen Spalte muss jedoch aus einem Zeichenvektor extrahiert werden. Ich schreibe dies:Fügen Sie in R data.table eine Spalte hinzu, deren Name auf einer Zeichenfolge basiert.
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)
Und ich erwartete etwas wie
x y products
1 5 5
2 2 5
5 6 5
9 7 5
Aber stattdessen bekam ich diese Fehlermeldung:
Error in `[.data.table`(dt, , `:=`((as.name(var_name)), 5)) :
LHS of := must be a symbol, or an atomic vector (column names or positions).
Wer weiß, wie meine Funktion zu beheben, es zu machen Arbeit?
Sie 'nicht as.name' dort verwenden. ': =' erwartet einen Zeichenvektor auf der LHS. Sie können eine data.table auch direkt mit 'data.table' konstruieren. Schließlich verwenden Sie 'return (dt [])', um [sicherzustellen, dass die data.table gedruckt wird] (http://stackoverflow.com/q/32988099/1412059) das erste Mal nach dem Aufruf der Funktion. – Roland
Ich habe es, danke –
Auch 'setDT (df)' ist mehr Speicher-effizient und viel schneller als 'dt = as.data.table (df)' –