выбор диапазонов столбцов с помощью sym и enquo с помощью dplyr :: select - PullRequest
0 голосов
/ 26 марта 2019

BLUP: возможно ли использовать sym / enquo для прохождения столбца диапазоны до dplyr::select?

Рассмотрим следующий столбец со столбцами от A до E:

library(tibble)
library(dplyr)
set.seed(4)
d = as_tibble(setNames(as.list(rnorm(5)), LETTERS[1:5]))
d
## # A tibble: 1 x 5
##       A      B     C     D     E
##   <dbl>  <dbl> <dbl> <dbl> <dbl>
## 1 0.217 -0.542 0.891 0.596  1.64

Я могу выбрать диапазон столбцов, используя оператор столбца :, например,

select(d, B:D)
## # A tibble: 1 x 3
##        B     C     D
##    <dbl> <dbl> <dbl>
## 1 -0.542 0.891 0.596

Я даже могу передать этот диапазон в виде фразы:

cols = quo(B:D)
select(d, !!cols)
# same result as above

Но я не могу передать его как символ:

colsym = sym("B:D")
select(d, !!enquo(colsym))
## Error in .f(.x[[i]], ...) : object 'A:C' not found

Это проблематично, когда используются выборки диапазона столбца, например, в пакете R.

В моем реальном примере,Я выбираю несколько диапазонов по 20-40 столбцов, поэтому я бы хотел использовать оператор : вместо записи нескольких векторов по 20-40 элементов и enquos (что, я полагаю, будет работать, но яеще не проверял).

1 Ответ

5 голосов
/ 26 марта 2019

Вы пытаетесь передать несинтаксическое имя B:D как символ - то, что вы хотите, это выражение.Вы можете использовать rlang::parse_expr для преобразования строки в выражение:

cols <- rlang::parse_expr("B:D")

select(d, !!cols)
## A tibble: 1 x 3
#       B     C     D
#   <dbl> <dbl> <dbl>
#1 -0.542 0.891 0.596
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...