子集数据表中的二进制运算符问题

J

因此,我需要对data.table进行子集化和计算。我需要按动态变量进行子集设置,但我不断收到非数字到二进制的运算符错误。

data(mtcars)
mtcars=as.data.table(mtcars)
mtcars[vs!=am,qsec*-1] ##flip the qsec variable to negative if vs and am do not equal; this works because I directly call qsec

col_to_use='qsec'
mtcars[vs!=am,..col_to_use*-1] ##Error in col_to_use * -1 : non-numeric argument to binary operator
mtcars[vs!=am,..col_to_use] ##Shows the subset to change, everything looks okay.

我想念什么?

阿克伦

最好在.SDcols一致性中指定它

mtcars[vs != am, .SD[[1]] * -1, .SDcols = col_to_use] 
#[1] -16.46 -17.02 -19.44 -20.22 -20.00 -22.90 -18.30 -18.90 -20.01 -16.70 -14.50 -15.50 -14.60

或另一个选择是get(可能与env有关)

mtcars[vs != am, get(col_to_use) * -1]
#[1] -16.46 -17.02 -19.44 -20.22 -20.00 -22.90 -18.30 -18.90 -20.01 -16.70 -14.50 -15.50 -14.60

或转换到symboleval审视你们

mtcars[vs != am, eval(as.symbol(col_to_use)) * -1]
#[1] -16.46 -17.02 -19.44 -20.22 -20.00 -22.90 -18.30 -18.90 -20.01 -16.70 -14.50 -15.50 -14.60

或利用.SD列名

mtcars[vs != am, .SD[[col_to_use]] * -1]
#[1] -16.46 -17.02 -19.44 -20.22 -20.00 -22.90 -18.30 -18.90 -20.01 -16.70 -14.50 -15.50 -14.60

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章