我想在data.table中进行一些计算,列名称可能会有所不同。
library(data.table)
DT1 <- data.table(x=1:10,y=1:10)
DT1[,list(y+x)]
现在,如果我对不包含y
列的DT做同样的事情:
DT <- data.table(x=1:10)
DT[,list(y+x)]
我会收到错误。当然我可以在data.table外面进行检查:
if("y" %in% names(DT))DT[,list(y+x)]
我想知道是否有办法用data.table本身来测试它,例如:
DT[exists("y"),y+x]
答案 0 :(得分:4)
我们可以在if/else
exists
条件
DT[, if(exists("y")) y+x else x]
如果我们要测试许多变量,即说'y','z'
nm <- c('y', 'z')
DT[, if(Reduce(`&`, lapply(nm, exists))) y + z + x else x]