Подтвердить что ты не робот

Двойные точки в ggplot

Я не могу найти документацию для двойных точек вокруг плотности

set.seed(1234)
df <- data.frame(cond = factor(rep(c("A","B"), each=200)), rating = c(rnorm(200),rnorm(200, mean=.8)))
print(head(df))
print(ggplot(df, aes(x=rating)) + 
    geom_histogram(aes(y=..density..),      # Histogram with density instead of count on y-axis
                   binwidth=.5,
                   colour="black", fill="white") +
    geom_density(alpha=.2, fill="#FF6666") +
    geom_vline(aes(xintercept=mean(rating, na.rm=T)),   # Ignore NA values for mean
               color="red", linetype="dashed", size=1))

Знаете ли вы, какой оператор они представляют?

Edit

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

> .
function (..., .env = parent.frame()) 
{
    structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>

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

4b9b3361

Ответ 1

В отличие от многих других языков, в R точка прекрасно действует в идентификаторах. В этом случае ..count.. является идентификатором. Однако в ggplot2 есть специальный код для обнаружения этого шаблона и для разметки точек. Маловероятно, что реальный код будет использовать идентификаторы, отформатированные таким образом, и поэтому это опрятный способ различать определенную и вычисленную эстетику.

Соответствующий код находится в конце layer.r:

# Determine if aesthetic is calculated
is_calculated_aes <- function(aesthetics) {
  match <- "\\.\\.([a-zA-z._]+)\\.\\."
  stats <- rep(FALSE, length(aesthetics))
  grepl(match, sapply(aesthetics, deparse))
}

# Strip dots from expressions
strip_dots <- function(aesthetics) {
  match <- "\\.\\.([a-zA-z._]+)\\.\\."
  strings <- lapply(aesthetics, deparse)
  strings <- lapply(strings, gsub, pattern = match, replacement = "\\1")
  lapply(strings, function(x) parse(text = x)[[1]]) 
}

Он используется далее выше в функции map_statistic. Если вычисленная эстетика присутствует, для графика используется другой фрейм данных (тот, который содержит, например, столбец count).

Единственная точка . - это еще один идентификатор, определенный в пакете plyr. Как вы можете видеть, это функция.