Как использовать ранее объявленные переменные внутри aes в ggplot со специальными операторами (..count.. и т.д.)

Скажем, я хочу построить гистограмму со следующей формулой (я знаю, что это не самое лучшее, но это проиллюстрирует проблему):

set.seed(1)
dframe <- data.frame(val=rnorm(50))
p <- ggplot(dframe, aes(x=val, y=..count..))
p + geom_bar()

Это прекрасно работает. Однако пусть говорят, что по какой-то причине мы хотим, чтобы частоты делились на число, определенное на уезде. Мой снимок будет:

k <- 5
p <- ggplot(dframe, aes(x=val, y=..count../k))
p + geom_bar()

Однако я получаю эту неприятную ошибку:

Error in eval(expr, envir, enclos) : object 'k' not found

Существует ли способ использования как ..count.. -подобных переменных с некоторыми предопределенными?

Ответы

Ответ 1

Кажется, что есть некоторая ошибка с функцией ggplot(), когда вы используете некоторый stat для построения графика (например, y=..count..). Функция ggplot() имеет уже environment переменную и поэтому может использовать переменную, определенную вне этой функции.

Например, это будет работать, потому что k используется только для изменения переменной x:

k<-5
ggplot(dframe,aes(val/k,y=..count..))+geom_bar()

Это даст ошибку, потому что k используется для изменения y, который вычисляется с помощью stat y=..count..

k<-5
ggplot(dframe,aes(val,y=..count../k))+geom_bar()
Error in eval(expr, envir, enclos) : object 'k' not found

Чтобы решить эту проблему, вы можете kefine k внутри aes().

k <- 5
ggplot(dframe,aes(val,k=k,y=..count../k))+geom_bar()