Замена точечной функции от plyr - PullRequest
0 голосов
/ 06 августа 2020

Как я могу преобразовать вектор групп, указанных с помощью функции plyr ., например .(group, sex), в вектор символов, подобных этому c("group", "sex").

Мы использовали подход plyr, чтобы указать группы в более старой версии нашего пакета R. В новой версии мы хотим, чтобы пользователь определял группы, используя вектор строк, но мы не хотим нарушать предыдущий код, в котором использовался точечный подход.

Пример старой функции:

library(plyr)

my_function_old <- function(df, grouping) {
  ddply(df, grouping, summarize,
        m = mean(mpg))
}

my_function_old(mtcars, .(cyl, vs))

Пример новой функции:

library(dplyr)

my_function_new <- function(df, grouping) {
  df %>% 
    group_by(!!!syms(grouping)) %>% 
    summarise(m = mean(mpg))
}

my_function_new(mtcars, c("cyl", "vs"))

В новой функции группировка должна быть указана с помощью вектора строк. Я хотел бы проверить, использует ли пользователь старую точечную нотацию в новой функции, и в этом случае преобразовать группирующие переменные, указанные точкой, в вектор строк.

1 Ответ

0 голосов
/ 31 августа 2020

Использование enexpr

library(dplyr)

my_function <- function(df, grouping) {
  grouping <- as.character(enexpr(grouping))[-1]
  
  df %>% 
    group_by(!!!syms(grouping)) %>% 
    summarise(m = mean(mpg))
}

my_function(mtcars, c("cyl", "vs")) # this works
my_function(mtcars, .(cyl, vs)) # this also works
...