更新示例: 我有一个功能如下:
myfun <- function(DT, var){
for(i in 1:length(var)){
s = substitute(!(is.na(x) | is.nan(x)), list(x=as.symbol(eval(var[i]))))
DT = DT[eval(s)]
}
return(DT)
}
输入:
> dt = data.table(id=c(1,2,3,4,5), x=c(1,2,NA,4,5), y=c(1,NA,3,4,NA))
> dt
id x y
1: 1 1 1
2: 2 2 NA
3: 3 NA 3
4: 4 4 4
5: 5 5 NA
运行:
> myfun(dt, var=c("x", "y"))
id x y
1: 1 1 1
2: 4 4 4
> myfun(dt, var=c("x"))
id x y
1: 1 1 1
2: 2 2 NA
3: 4 4 4
4: 5 5 NA
var
是DT中一些变量的字符数组。目标是仅获取 DT 中没有任何NA
或不包含任何NaN
变量的行var
。
我不想要 for 循环。我想构建一个s
包含所有条件的查询,然后对该查询进行评估DT
。对于我想要的第一种情况:
s = !(is.na(x) | is.nan(x) | is.na(y) | is.nan(y))
对于我想要的第二种情况:
s = !(is.na(x) | is.nan(x))
如何构造一个动态查询并在数据表中将s
其作为查询运行一次。i/where
更一般地说,我如何expression
根据输入创建动态。使用expression(paste())
对我没有帮助。然后我可以使用substitute
.