Вопрос: почему я не могу вызвать sapply
внутри aes()
?
Цель следующего рисунка: создать гистограмму, показывающую пропорцию, которая умерла/жила, чтобы пропорция для каждой комбинации сумм группы/типа была равна 1 (пример был вдохновлен предыдущим сообщением ).
Я знаю, что вы можете сделать цифру, обобщая вне ggplot
, но вопрос в том, почему функция не работает внутри aes
.
## Data
set.seed(999)
dat <- data.frame(group=factor(rep(1:2, 25)),
type=factor(sample(1:2, 50, rep=T)),
died=factor(sample(0:1, 50, rep=T)))
## Setup the figure
p <- ggplot(dat, aes(x=died, group=interaction(group, type), fill=group, alpha=type)) +
theme_bw() +
scale_alpha_discrete(range=c(0.5, 1)) +
ylab("Proportion")
## Proportions, all groups/types together sum to 1 (not wanted)
p + geom_histogram(aes(y=..count../sum(..count..)), position=position_dodge())
## Look at groups
stuff <- ggplot_build(p)
stuff$data[[1]]
## The long way works: proportions by group/type
p + geom_histogram(
aes(y=c(..count..[..group..==1] / sum(..count..[..group..==1]),
..count..[..group..==2] / sum(..count..[..group..==2]),
..count..[..group..==3] / sum(..count..[..group..==3]),
..count..[..group..==4] / sum(..count..[..group..==4]))),
position='dodge'
)
## Why can't I call sapply there?
p + geom_histogram(
aes(y=sapply(unique(..group..), function(g)
..count..[..group..==g] / sum(..count..[..group..==g]))),
position='dodge'
)
Ошибка в get (as.character(FUN), mode = "function", envir = envir): объект 'expr' режима 'function' не найден