我有一个 data.table -
DT<-data.table(ACT=c("Media","nonMedia","Media","TV"), MESSAGE = c("Standalone","other","other","Standalone"))
ACT MESSAGE
Media Standalone
nonMedia other
Media other
TV Standalone
我有 2 个带有值的向量:-
ACT=c("Media","TV")
MESSAGE = c("Standalone")
随着这些向量不断变化,我必须制作行级动态过滤器。过滤器将是:
DT[!(ACT %in% c('Media','TV')) & !(MESSAGE %in% c('Standalone')),]
到现在为止我所取得的——
filter_Members<-c("ACT","MESSAGE")
filterElements <- list()
filterElements<-lapply(filter_Members, function(x) paste0("!(",paste0(x, " %in% ", paste0("'",get(x),"'")),")", collapse = " & "))
filterCond <- paste0(filterElements, collapse = " & ")
> filterCond
[1] "!(ACT %in% 'Media') & !(ACT %in% 'TV') & !(MESSAGE %in% 'Standalone')"
问题是,如果我们使用这个条件,它会以字符向量的形式给出错误。
> DT[filterCond,] Error in `[.data.table`(DT, filterCond, )
现在,如果我们按原样使用此条件,但不使用双引号,它可以工作-
DT[!(ACT %in% 'Media') & !(ACT %in% 'TV') & !(MESSAGE %in% 'Standalone'),]
结果 -
ACT MESSAGE
nonMedia other
我尝试了以下两种方法,但都没有奏效。
DT[noquote(filtercond),]
DT[eval(filtercond),]
我该如何解决这个问题?