R 基于列值更新data.table中的列值

R 基于列值更新data.table中的列值,r,data.table,R,Data.table,考虑以下代码: library(data.table) dataT <-data.table(1:15,runif(15),runif(15),runif(15)) for(vrb in names(dataT)) { dataT[get(vrb) < 0.5, (vrb):=0.5] # update value } 库(data.table) dataT我们可以使用set for(vrb in names(dataT)){ set(dataT, i = which(d

考虑以下代码:

library(data.table) 
dataT <-data.table(1:15,runif(15),runif(15),runif(15))

for(vrb in names(dataT)) {
  dataT[get(vrb) < 0.5, (vrb):=0.5] # update value
}
库(data.table)

dataT我们可以使用
set

for(vrb in names(dataT)){
 set(dataT, i = which(dataT[[vrb]] < 0.5), j = vrb, value = 0.5)
}

这可能会对更新之前没有先进行子集设置造成轻微的性能损失,但我发现它更具可读性:

dataT[, colnames(dataT) := lapply(.SD, pmax, .5)][]
dataT[, colnames(dataT) := lapply(.SD, pmax, .5)][]