Использование выбора с предложениями - PullRequest
0 голосов
/ 03 июля 2018

Вопрос

Как бы я сделал следующее, используя каверсы?

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)

Context

В моем приложении я смешиваю традиционные селекторы R и tidyverse глаголы, но я хочу придерживаться одной системы для согласованности. Большинство вещей легко перевести из одной «вселенной» в другую, но я борюсь с этим.


Сноска

Я знаю, что есть много возможностей решить это. Но ради моего изучения давайте предположим, что lkpq является фиксированным и не может быть изменено. Поэтому мне действительно интересно узнать, как я могу использовать список предложений с select, если некоторые элементы не являются частью базовых данных.

1 Ответ

0 голосов
/ 03 июля 2018

Мы можем использовать

quosSelect <- function(mdat) {

  nm1 <- intersect(names(mdat), sapply(lkpq, quo_name))
  mdat %>% 
          select(nm1)
  }

quosSelect(mtcars) 
quosSelect(iris)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...