#r #ggplot2
#r #ggplot2
Вопрос:
С ggplot
помощью я пытаюсь создать пользовательскую функцию для построения boxplot
графика для одного столбца в dataframe
таком, чтобы ее можно было использовать с любым dataframe
Конкретный пример
male = data.frame(male = c(127,44,28,83,0,6,78,6,5,213,73,20,214,28,11)) # data from
ggplot(data = male, aes(x = "", y = male)) geom_boxplot()
stat_summary(fun=mean, geom="point", shape=20, size=2, color="red", fill="red")
Это дает ожидаемый блок-график с mean
отображением в виде точки.
Обобщенная функция — здесь операция, выполненная в конкретном примере, преобразуется в обобщенную функцию
boxPlotFn = function (df, colName) {
ggplot(data = df, aes_string(x = "", y = colName)) geom_boxplot()
stat_summary(fun=mean, geom="point", shape=20, size=2, color="red", fill="red")
}
И я вызываю функцию, как показано ниже
boxPlotFn(male, "male")
Однако это выдает ошибку Error: No expression to parse
— rlang::last_error()
указывает, что ошибка возникает при вызове ggplot
. Что я здесь не делаю?
Ответ №1:
Это немного сложно, но легко решаемо. Чтобы заставить вашу функцию работать, aes_string
вам нужно заключить «двойные кавычки», сопоставленные с x
использованием, например, одинарных кавычек. Кроме того, он, вероятно, должен быть data = df
внутри вашей функции:
library(ggplot2)
male = data.frame(male = c(127,44,28,83,0,6,78,6,5,213,73,20,214,28,11)) # data from
boxPlotFn = function (df, colName) {
ggplot(data = df, aes_string(x = '""', y = colName))
geom_boxplot()
stat_summary(fun=mean, geom="point", shape=20, size=2, color="red", fill="red")
}
boxPlotFn(male, "male")