假设我在一个data.table
个对象中创建一个新列:
require(data.table)
data(iris)
dt.iris <- data.table(iris)
dt.iris[,shortSpecies:=substr(Species,1,5)]
现在,我不想直接使用:=
来执行此操作,而是希望有一个函数,该函数将创建列的代码作为参数,然后对其求值.我最终得到了这样的结果:
make_new_col <- function(inputDT, newColName, construction){
set(
x = inputDT,
j = newColName,
value=eval(expr = parse(text = construction), envir=inputDT)
)
}
dt.iris <- make_new_col(
inputDT = dt.iris,
newColName = 'shortSpecies',
construction = 'substr(Species,1,5)'
)
这是可行的,但现在我想添加一个条件,即使其等同于dt.iris[Sepal.Length>5,shortSpecies:=substr(Species,1,5)]
.我需要以某种方式将条件传递到set()
的i=
部分进行判断,但我找不到有效的解决方案.