#r #ggplot2
#r #ggplot2
Вопрос:
Я пытаюсь запустить следующий код:
temp_plotdata <- data.table(Treatment_Code = c('Control', 'Control',
'Second Mailing', 'Second Mailing',
'First Mailing', 'First Mailing'),
Q9 = c(9, 14, 10, 3, 1, 4))
output_gg <-
ggplot(temp_plotdata, aes(x = Q9))
geom_histogram(binwidth = 1, fill = 'lightblue')
geom_vline(data = temp_plotdata[, summary(Q9)[c(2,3,5)], by=Treatment_Code],
aes(xintercept = V1),
linetype = 'dashed', color = 'darkred')
facet_wrap(~Treatment_Code, ncol = 1)
Я возвращаю ошибку:
Ошибка в предоставленных именах (x, sep = sep, base = base): ‘dimnames’ применяется к не массиву
Я знаю, что проблема в geom_vline
части кода, потому что, когда я запускаю его без этих строк или с чем-то вроде geom_vline(xintercept = c(3, 5, 8))
, он работает нормально. Я также попытался сначала преобразовать данные из geom_vline
в отдельный фрейм данных, но это не сработало.
В прошлом году я запускал очень похожий фрагмент кода, и он работал нормально, поэтому я не уверен, изменилось ли что-то с geom_vline
или мой код просто некорректен из-за новых данных или какого-то небольшого изменения, которое я, возможно, случайно внес.
Спасибо за любую помощь, которую вы можете оказать.
Комментарии:
1. Я использую 2.1.0. Я думаю, что это последняя версия.
Ответ №1:
Это происходит потому, что класс V1
(итоговый столбец, возвращаемый data.table
) является таблицей, а не числовым вектором. Измените его на вектор, и он должен работать.
output_gg <-
ggplot(temp_plotdata, aes(x=Q9))
geom_histogram(binwidth=1, fill='lightblue')
geom_vline(data=temp_plotdata[, as.vector(summary(Q9)[c(2,3,5)]), by=Treatment_Code],
aes(xintercept=V1),
linetype='dashed', color='darkred')
facet_wrap(~ Treatment_Code, ncol=1)
Сравните структуру фрейма данных до и после:
str(temp_plotdata[, summary(Q9)[c(2,3,5)], by=Treatment_Code])
Classes ‘data.table’ and 'data.frame': 9 obs. of 2 variables:
$ Treatment_Code: chr "Control" "Control" "Control" "Second Mailing" ...
$ V1 :Class 'table' num [1:9] 10.25 11.5 12.75 4.75 6.5 ...
- attr(*, ".internal.selfref")=<externalptr>
str(temp_plotdata[, as.vector(summary(Q9)[c(2,3,5)]), by=Treatment_Code])
Classes ‘data.table’ and 'data.frame': 9 obs. of 2 variables:
$ Treatment_Code: chr "Control" "Control" "Control" "Second Mailing" ...
$ V1 : num 10.25 11.5 12.75 4.75 6.5 ...
- attr(*, ".internal.selfref")=<externalptr>