我怎样才能在下面的代码中达到预期的结果?
library(magrittr); library(ggplot2); library(data.table)
dt <- diamonds %>% setDT
input <- list()
input$col = "cut"
dt[ , (input$col) := ifelse( get(input$col) == "Good", "Bon", get(input$col))] # Original post had typo : ... get(input$col):= "Good" ... instead of ... == ...
以便用户可以输入(例如,通过闪亮的应用程序),在哪些列中需要进行单词替换?
上面的代码生成此错误:
Error in `:=`(get(input$col), "Good") :
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
3条答案
按热度按时间fsi0uk1n1#
如果将第二个
:=
更改为==
,则原始代码将正常工作,如下所示:但是,一般情况下,您可能需要考虑改用
[["col"]]
:最后,您还可以使用
set()
,因为您要就地更新cut
:并不是在所有情况下
cut
都是一个因子,而且实际上是一个数值,因此您在这里替换的方式将导致cut
的其他值恢复为它们的基本数值格式。cfh9epnr2#
看起来下面的代码是最短的(写起来)和最快的(执行起来):
我想知道为什么我没有早点想到这一点?(还有其他人?)...
输出:
u5rb5r593#
我们可以使用
.SDcols