У меня есть данные с большим количеством факторных переменных, которые я визуализирую, чтобы получить представление о каждой из переменных. Я воспроизводю большую часть кода с небольшими изменениями для имен переменных и т. д., поэтому решил написать функцию для простых вещей. Я просто не могу заставить его работать...
Фиктивные данные
ID <- sample(1:32, 128, replace = TRUE)
AgeGrp <- sample(c("18-65", "65-75", "75-85", "85+"), 128, replace = TRUE)
ID <- factor(ID)
AgeGrp <- factor(AgeGrp)
data <- data_frame(ID, AgeGrp)
data
В основном то, что я пытаюсь сделать с каждой факторной переменной, — это создать гистограмму с метками процентов внутри столбцов. Например, с фиктивными данными.
plotstats <- #Create a table with pre-summarised percentages
data %>%
group_by(AgeGrp) %>%
summarise(count = n()) %>%
mutate(pct = count/sum(count)*100)
age_plot <- #Plot the data
ggplot(data,aes(x = AgeGrp)) +
geom_bar() + #Add the percentage labels using pre-summarised table
geom_text(data = plotstats, aes(label=paste0(round(pct,1),"%"),y=pct),
size=3.5, vjust = -1, colour = "sky blue") +
ggtitle("Count of Age Group")
age_plot
Это отлично работает с фиктивными данными, но когда я пытаюсь создать функцию...
basic_plot <-
function(df, x){
plotstats <-
df %>%
group_by_(x) %>%
summarise_(
count = ~n(),
pct = ~count/sum(count)*100)
plot <-
ggplot(df,aes(x = x)) +
geom_bar() +
geom_text(data = plotstats, aes(label=paste0(round(pct,1),"%"),
y=pct), size=3.5, vjust = -1, colour = "sky blue")
plot
}
basic_plot(data, AgeGrp)
Я получаю код ошибки:
Ошибка в UseMethod("as.lazy"): нет применимого метода для "as.lazy", примененного к объекту класса "factor"
Я рассмотрел вопросы здесь, здесь и здесь, а также просмотрел Виньетка NSE, но не могу найти свою ошибку.
basic_plot
. 1) изменить строку сggplot(df, aes(x = x))
наggplot(df, aes_(x = x))
и вызвать функцию как:basic_plot(data, quote(AgeGrp))
. Следует также отметить, что это вполне достижимо без стандартной оценки, но это может быть хорошим обучающим примером. - person Chrisss   schedule 17.02.2017