#r #plotly
Вопрос:
Я видел этот пример сюжета, и мне интересно, как работает тильда (~) :
plot_ly(
x = ~gdpPercap,
y = ~lifeExp,
size = ~pop,
color = ~continent,
frame = ~year,
text = ~country,
hoverinfo = "text",
type = 'scatter',
mode = 'markers'
)
Я имею в виду, что я понимаю, что он делает (выбирая столбец с тем же именем в фрейме данных), но что на самом деле делает этот оператор? Какова природа идентификатора после тильды (это не переменная, не литерал, …)? Является ли это специфичным для сюжета?
Я видел документацию об операторе тильды в R, но она, похоже, не связана с этим конкретным использованием.
И, наконец, каков синтаксис, если имя столбца во фрейме данных содержит такие символы, как » — «или»/»?
Комментарии:
1. Оператор тильды, на мой взгляд, используется немного чрезмерно(ab), хотя все они в некотором смысле похожи. (1) В базе R он используется для создания
formula
, которое, помимо прочего, имеет тенденцию включать вызывающую среду; это может быть использовано для (например) определения/извлечения матрицы модели. (2) Вrlang
/purrr
он используется как своего рода сокращенная анонимная функция для игры в гольф, гдеfunction(z) z*2
—> >~ .x*2
или просто~ .*2
. (3) По сути, он используется для объявления переменной, которая будет использоваться, но способом NSE. (Возможно, в этом есть что-то большее, иначе мне это кажется малоэффективным.)
Ответ №1:
Как сказал @r2evans в комментарии, он используется для создания формулы. Это быстрый способ сделать две вещи: записать немного языка R без его оценки и связать среду, в которой он был создан, с результатом.
Различия между вещами заключаются в том, как функции, в которых он используется, используют объект формулы. Например, lm()
функция в базе R говорит, что выражения слева от тильды рассматриваются как ответы, а выражения справа кодируют объясняющие переменные.
Причина plot_ly
, по которой он используется, заключается в том, что имена, которые он использует ( gdpPercap
и т. Д.), Не обязательно должны быть переменными, видимыми в текущей глобальной среде, они могут быть столбцами, взятыми из data
аргумента. Этот аргумент стоит на первом месте, поэтому с трубами вы можете говорить такие вещи, как
df <- data.frame(a=1:10)
b <- rnorm(10)
df %>% plot_ly(x = ~a, y = ~b) # incomplete example...
и он может искать a
в df
b
глобальной среде и в ней.
Что касается вашего последнего вопроса, вы можете поместить несинтаксические имена в обратные ссылки, например
`a/b` <- 3
`a/b`
# [1] 3