Я пытаюсь написать функцию, которая создаст ggplot, в котором все компоненты основаны на одном входе. У меня есть фрейм данных с расой, результаты по трем оценкам (чтение, письмо, математика) плюс доверительный интервал для каждого результата. Я хочу создать функцию, которая будет создавать тот же график на основе Read, Write или Math.
Например, это работает, если я использую var Read_per c
library(tidyverse)
dat <- data.frame (Race = c("White", "Black", "Inidigenous"),
Read_perc = c (0.756, 0.592, 0.548),
Read_low_ci = c (0.742, 0.498, 0.467),
Read_high_ci = c(0.769, 0.679, 0.628),
Write_perc = c (0.717, 0.625, 0.497),
Write_low_ci = c (0.703, 0.532, 0.416),
Write_high_ci = c (0.731, 0.710, 0.578))
my_plot_function <- function (df, var){
var <- enquo(var)
df %>%
ggplot (aes (x = reorder (Race, !! var), y = !! var)) +
geom_col () +
coord_flip () +
geom_text (aes (label = scales::percent(!! var, accuracy = 1)),
y = 0.05,
colour = "white")
}
my_plot_function(dat, Read_perc)
Однако Я хочу использовать только чтение или запись, а затем использовать его для вызова различных столбцов, таких как Read_per c, Read_low_ci, et c.
Например, это не работает:
my_plot_function <- function (df, var){
var <- enquo (var)
var_low_ci <- paste0 (var, "_low_ci")
var_high_ci <- paste0 (var, "_high_ci")
df %>%
ggplot (aes (x = reorder (Race, !! var), y = !! var)) +
geom_col () +
coord_flip () +
geom_text (aes (label = scales::percent(!! var, accuracy = 1)),
y = 0.05,
colour = "white") +
geom_errorbar(aes(ymin = var_low_ci,
ymax = var_high_ci),
colour = "black")
Окончательный график должен выглядеть примерно так:
![enter image description here](https://i.stack.imgur.com/9IeHC.png)