问题
如何使用Quosures执行以下操作?
library(tidyverse)
lkp <- c("am", "vs", "Sepal.Width", "Sepal.Length")
stringSelect <- function(mdat) {
lkpOK <- intersect(lkp, names(mdat))
mdat %>% select(one_of(lkpOK))
}
stringSelect(mtcars)
stringSelect(iris)
所以,基本上,我如何能子集
lkpq
为了达到同样的目的
quos
为了避免警告?
lkpq <- quos(am, vs, Sepal.Width, Sepal.Length)
quosSelect <- function(mdat) {
lkpqOK <- lkpq ##???
mdat %>% select(!!!lkpqOK)
}
quosSelect(mtcars) ## does not work
quosSelect(iris)
上下文
在我的应用程序中,我混合了传统的R选择器和
tidyverse
但为了一致性,我想坚持一个系统。大多数事情都很容易从一个“宇宙”转换到另一个“宇宙”,但我正在努力解决这一点。
脚注
我知道有很多可能解决这个问题。但是为了我的学习,让我们假设
LKPQ
是固定的,不能更改。所以我真的很有兴趣了解如何使用
select
如果某些元素不是基础数据的一部分。