Rlang: как рассматривать строки как символы - PullRequest
2 голосов
/ 27 октября 2019

Еще раз я озадачен документацией rlang и сообщениями об ошибках. Я попробовал 20 различных итераций этого, используя двойной и тройной удары, :=, quo, enquo, ensym и любую другую функцию rlang с неясным названием.

Если вы чувствуете разочарование, это потому, что каждый раз, когда я пытаюсь использовать rlang для работы с переменными для имен объектов, я сталкиваюсь с одной и той же стеной. Я что-то упускаю из виду? Я тупой? Неужели имена и документация rlang действительно плохие?

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

require(tidyverse)
require(rlang)

x <- enframe(names(mtcars), name = NULL, value = "var") %>% 
  add_column(df = "mtcars")

x %>% mutate(cls = class(sym(paste0(df, "$", var))))
#> Only strings can be converted to symbols

Создан в 2019-10-27 пакетом Представить (v0.3.0)

1 Ответ

3 голосов
/ 28 октября 2019

1) Анализ и оценка.

library(dplyr)
library(rlang)

x %>% rowwise %>% mutate(cls = class(eval_tidy(parse_expr(paste0(df, "$", var)))))

2) или используйте sym от rlang и pull от purrr

library(dplyr)
library(purrr)
library(rlang)

x %>% rowwise %>% mutate(cls = class(pull(eval_tidy(sym(df)), var)))

3) или базовая функция R get для извлечения df:

library(dplyr)

x %>% rowwise %>% mutate(cls = class(get(df)[[var]]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...