Невозможно использовать функцию входного аргумента в качестве аргумента фильтра (R / dplyr) - PullRequest
0 голосов
/ 09 июня 2018

Я столкнулся со следующей проблемой при написании функции в R. Я хотел использовать одно из имен моих столбцов (id) в качестве входного аргумента (X) в моей функции для фильтрации моего набора данных.

К сожалению, моя функция, похоже, не понимает аргумент X в фильтре ().Кто-нибудь есть какие-либо предложения, как я могу заставить это работать?

Спасибо

ДАННЫЕ

library(tidyverse)

df_data <- tibble(
  year = c(2004, 2005, 2006),
  id = c(1, 2, 3),
  value = c(10, 12, 1)
)

ФУНКЦИЯ

FUNCTION <- function(data, X, Y){
    result <- df_data %>%
    filter(X == Y) %>%
    glimpse
}

ВЫХОД

FUNCTION(data = df_data,X = "id", Y = 1)  

Observations: 0
Variables: 3
  $ year  <dbl> 
  $ id    <dbl> 
  $ value <dbl> 

1 Ответ

0 голосов
/ 09 июня 2018

Мы можем использовать sym из rlang, если предполагаемый входной аргумент для 'X' - строка

FUNCTION <- function(data, X, Y){
 data %>%
  filter((!! rlang::sym(X)) == Y) 
}

FUNCTION(data = df_data, X = "id", Y = 1)  
# A tibble: 1 x 3
#   year    id value
#  <dbl> <dbl> <dbl>
#1  2004     1    10

Если мы используем значение без кавычек для 'X', преобразовать воценить и затем оценить (!!)

FUNCTION <- function(data, X, Y){
 X <- enquo(X)
 data %>%
   filter((!! X) == Y)

   }

ПРИМЕЧАНИЕ. В сообщении ОП параметр 'data' также отличается внутри FUNCTION

FUNCTION(data = df_data, X = id, Y = 1)  
# A tibble: 1 x 3
#   year    id value
#  <dbl> <dbl> <dbl>
#1  2004     1    10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...