R: ошибка в qplot из ggplot2: отсутствует аргумент "env", без значения по умолчанию

Я использую qplot из ggplot2 для расчета расстояний семян, разбросанных разными видами в R. Когда я использую geom='density', он работает просто отлично! Но то, что я действительно хочу, это график частоты/области, для которого я получаю ошибку, я не знаю, как обращаться.

Это работает:

qplot(Dist,data=testx,geom="density",fill=Animal,log=c('x','y'),alpha=I(0.5))

Это не работает:

qplot(Dist,data=testx,geom="area",fill=Animal,log=c('x','y'))

Error in exists(name, envir = env, mode = mode) : 
  argument "env" is missing, with no default

Помощь? Спасибо!

Ответ 1

Причина этой ошибки (сообщение довольно неясное, я согласен) заключается в том, что вы пытаетесь использовать geom_area (qplot(geom = "area")примерно такая же, как + geom_area()). В то время как geom_density требует только x (x = Dist в вашем случае), этого недостаточно для geom_area, поскольку он дополнительно использует ymax (для страниц справки, см. this, который ссылается на this).

Здесь приведен пример плотности и частотных графиков, которые вы можете настроить для своих данных:

ggplot(data=diamonds, aes(x=carat, fill=clarity)) + geom_density(alpha=0.5)
ggplot(data=diamonds, aes(x=carat, colour=clarity)) + geom_freqpoly()

Пример вашего кода не reproducible, поэтому я не могу проверить следующую строку, но

ggplot(data=testx, aes(x=Dist, colour=Animal)) + geom_freqpoly() + 
  scale_x_log10() + scale_y_log10()

может быть тем, что вам нужно.

Ответ 2

Что касается этого сообщения об ошибке, это может указывать на то, что это сообщение об ошибке, которое вы получаете, когда используете пустой набор данных для гистограммы:

df <- data.frame(testx = rnorm(0))
p <- ggplot(df, aes(x=testx)) +
  geom_histogram()
plot(p)

Error in exists(name, envir = env, mode = mode) : 
  argument "env" is missing, with no default

К сожалению, сообщение об ошибке в этом случае не очень полезно. Когда я впервые столкнулся с этой проблемой, мне потребовалось некоторое время, чтобы понять, что я просто случайно попал в пустой кадр данных. У ОП, вероятно, была другая проблема, но всегда хорошо знать, что эта ошибка связана с этой глупой ошибкой.