R ggplot — прямоугольная диаграмма в обобщенной функции

#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")