Я пытаюсь написать пользовательскую функцию, в которой я хочу отобразить оценку размера эффекта и его доверительные интервалы в ggplot2
сюжетном субтитре.Я использую plotmath
для правильного отображения греческих букв и других математических символов.
Вот как должны выглядеть два варианта подзаголовка: *
Чтобы достичь этого, я написал простую функцию -
# set up
set.seed(123)
library(tidyverse)
library(cowplot)
# creating a fictional dataframe with effect size estimate and its confidence
# intervals
effsize_df <- tibble::tribble(
~estimate, ~conf.low, ~conf.high,
0.25, 0.10, 0.40
)
# function to prepare subtitle
subtitle_maker <- function(effsize_df, effsize.type) {
if (effsize.type == "p_eta") {
# preparing the subtitle
subtitle <-
# extracting the elements of the statistical object
base::substitute(
expr =
paste(
eta["p"]^2,
" = ",
effsize,
", 95% CI",
" [",
LL,
", ",
UL,
"]",
),
env = base::list(
effsize = effsize_df$estimate[1],
LL = effsize_df$conf.low[1],
UL = effsize_df$conf.high[1]
)
)
} else if (effsize.type == "p_omega") {
# preparing the subtitle
subtitle <-
# extracting the elements of the statistical object
base::substitute(
expr =
paste(
omega["p"]^2,
" = ",
effsize,
", 95% CI",
" [",
LL,
", ",
UL,
"]",
),
env = base::list(
effsize = effsize_df$estimate[1],
LL = effsize_df$conf.low[1],
UL = effsize_df$conf.high[1]
)
)
}
# return the subtitle
return(subtitle)
}
Обратите внимание, что код для условных операторов отличается только в одной строке: eta["p"]^2
(если это "p_eta"
) или omega["p"]^2
(если это "p_omega"
), а остальная часть кода идентична .Я хочу реорганизовать этот код , чтобы избежать повторения.
Я не могу условно назначить eta["p"]^2
и omega["p"]^2
другому объекту в теле функции (скажем, effsize.text <- eta["p"]^2
) потому что R
будет жаловаться, что объекты eta
и omega
не найдены в окружающей среде.
Как я могу это сделать?
---------------------- post-script --------------------------------------
Ниже приведен код, использованный для создания комбинированного графика, показанного выше:
# creating and joining two plots (plot is shown above)
cowplot::plot_grid(
# plot 1
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_blank() +
labs(
subtitle = subtitle_maker(effsize_df, "p_omega"),
title = "partial omega"
),
# plot 2
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_blank() +
labs(
subtitle = subtitle_maker(effsize_df, "p_eta"),
title = "partial eta"
),
labels = c("(a)", "(b)"),
nrow = 1
)