передача аргумента в качестве обещания другой функции, использующей двойную скобку - PullRequest
0 голосов
/ 06 августа 2020

Я знаком с синтаксисом embrace dplyr , который позволяет динамически передавать имя переменной без кавычек в качестве аргумента функции. Например, после определения

library(dplyr)
pull_column <- function(tb, colname) {
    tb %>% 
        pull({{colname}})
}

можно, например, извлечь столбец name из таблицы starwars, запустив команду

starwars %>% pull_column(name)

Моя цель - создать другую функцию который также принимает аргумент colname, а затем использует предоставленное значение для пересылки в качестве аргумента функции pull_column(). Например, эта функция сначала фильтрует по цвету глаз, а затем вызывает pull_column():

pull_column_for_eyecolor <- function(tb, colname, eyecolor){
    tb %>% 
        filter(eye_color == eyecolor) %>% 
        pull_column(colname)
}

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

starwars %>% pull_column_for_eyecolor(name, "yellow")

Я получаю

Ошибка: имя объекта не найдено

Есть ли способ указать значение без кавычек для аргумента colname как для pull_column() и pull_column_for_eyecolor() работают без ошибок?

1 Ответ

1 голос
/ 06 августа 2020

Напишите свою функцию pull_column_for_eyecolor как

pull_column_for_eyecolor <- function(tb, colname, eyecolor){
  qColName <- enquo(colname)
  tb %>% 
    filter(eye_color == eyecolor) %>% 
    pull_column(!! qColName)
}

, чтобы

starwars %>% pull_column_for_eyecolor(name, "yellow")
 [1] "C-3PO"             "Darth Vader"       "Palpatine"         "Watto"             "Darth Maul"        "Dud Bolt"          "Ki-Adi-Mundi"      "Yarael Poof"       "Poggle the Lesser"
[10] "Zam Wesell"        "Dexter Jettster"

Подробности см. здесь . Это классная c нестандартная проблема с оценкой.

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