31

我找不到密度周围双点的文档

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))

你知道他们代表什么运营商吗?

编辑

我知道它geom 中使用时的作用,我想知道它什么。例如,单点运算符定义为

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

如果我重新定义density,那么..density..会产生不同的效果,所以看起来 XX -> ..XX.. 是一个运算符。我想知道它是如何定义的。

4

1 回答 1

34

与许多其他语言不同,在 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包中定义的另一个标识符。如您所见,它是一个函数。

于 2013-07-06T19:12:39.610 回答