В чем разница между `as.name` и` sym`? - PullRequest
2 голосов
/ 26 апреля 2019

Я пытаюсь обернуть голову вокруг стандартных, нестандартных вычислений, предложений и т. Д. Во многих примерах я вижу, что переданная строковая переменная преобразуется в dplyr -используемую форму либо с as.name, либо с sym из rlang пакета.

Они взаимозаменяемы в трубах? В каких случаях у одного или другого не получится?

1 Ответ

3 голосов
/ 26 апреля 2019

РЕДАКТИРОВАТЬ : Я не мог с готовностью создать сценарий, где as.name не работает. Хэдли , похоже, согласен с тем, что as.name может работать.Хотя при этом используется select, который действительно надежен, попытка с group_by и summarise, по-видимому, не имеет различий.

Надежный select:

 varName <- "Sepal.Length"
 select(iris, varName) #This works

Нет разницы между as.name и sym для нескольких запущенных мной примеров.

iris %>%
    group_by(!!as.name(varName))
iris %>% 
    group_by(!!sym(varName))

Попытки изменить encoding:

var1 <- `Encoding<-`(varName, "unknown") 

И as.name, и sym все еще работают.

Оригинальный ответ :

Из документов ?sym:

Эти функциивзять строки в качестве входных данных и превратить их в символы.

В отличие от as.name(), они заранее преобразуют строки в собственную кодировку. Это необходимо, поскольку символы автоматически удаляют метку кодирования строк (см. set_str_encoding()).

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

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