РЕДАКТИРОВАТЬ : Я не мог с готовностью создать сценарий, где 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
и связанных с ним функций устраняет проблему, связанную с кодированием.