我有一个辅助函数(比如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
and z
。
如果foo
包含select(data,c(taxon,model,z))
则foo(d2)
失败(因为d2
不包含model
)。如果我使用select(data,-pss)
thenfoo(d1)
类似地失败。
如果我从 tidyverse 撤退(只是 return ),我知道如何做到这一点data[vars]
,但我想知道是否有一种方便的方法可以做到这一点,或者(1)使用某种select()
助手(tidyselect::select_helpers
)或(2)使用 tidyeval(其中我还没有找到时间让我的头脑转转!)