我有一个辅助函数(比如说foo()
),将在各种数据框上运行,这些数据框可能包含特定的变量,也可能不包含。假设我有
library(dplyr)
d1 <- data_frame(taxon=1,model=2,z=3)
d2 <- data_frame(taxon=2,pss=4,z=3)
我想要选择的变量是
vars <- intersect(names(data),c("taxon","model","z"))
也就是说,我希望 foo(d1)
返回 taxon
、model
和 z
列,而 foo(d2)
仅返回 taxon
和 z
列。
如果 foo
包含 select(data,c(taxon,model,z))
,那么 foo(d2)
将失败(因为 d2
不包含 model
)。如果我使用 select(data,-pss)
,那么 foo(d1)
也会类似地失败。
如果我退离 tidyverse,我知道如何做到这一点(只需返回 data[vars]
),但我想知道是否有一种方便的方法来实现这一点,即 (1) 使用某种 select()
辅助程序(如 tidyselect::select_helpers
)或者 (2) 使用 tidyeval(我还没有抽出时间去搞清楚!)
select_if(...)
似乎比select(which(...))
更好。 - Ben Bolkerselect_if(names(.)...)
非常慢。 - Inferrator