R: объект в пользовательской функции не найден для указанного c использования - PullRequest
0 голосов
/ 07 апреля 2020

Я сталкиваюсь с проблемой с R (и ее хорошо известной строгостью в работе с объектами ...): я написал пользовательскую функцию для построения точечных графиков из ggplots и добавил пользовательское значение p в скобках. Проблема не в сюжете (он работает хорошо ...), а в работе с объектами и функциями: я не могу использовать объект, созданный внутри функции. Некоторый код для объяснения:

pval.label <- function(p)
{
   if (p < 0.001) { return("p<0.001") }
   else { return(paste0("p = ", round(p, digits = 2))) }
}

dot_plot <- function(data, var, endpoint, title, ylab)
{
   endpoint = deparse(substitute(endpoint))
   var = deparse(substitute(var))
   df = data.frame(var = data[[var]], endpoint = data[[endpoint]])

   pvalue = compare_means(data = df, formula = var ~ endpoint)
   pvalue <- pvalue %>% mutate(y.position = 120*(max(df$var)/100))

   plot =
      ggplot(df, aes(x=endpoint, y=var)) +
      labs(title = title, y = ylab, x="") +
      geom_dotplot(binaxis='y', stackdir='center', stackratio=1.7, binwidth = .8, show.legend = F,
                   aes(fill = endpoint, color = endpoint)) +
      stat_summary(fun=median, geom="crossbar", lwd=.5, width=.7, col="black", show.legend=F) +
      scale_fill_manual(values=c("#2d419b", "#ee2025")) +
      scale_color_manual(values=c("#2d419b", "#ee2025")) +
      theme_classic() +
      theme(text = element_text(family = "sans", face = "bold"),
            plot.title = element_text(size = 14, hjust = .5, lineheight = 1.5),
            axis.text = element_text(size = 12, face = "bold", colour = "black"),
            axis.title = element_text(size = 14, face = "bold", colour = "black"),
            axis.line = element_line(size = 1),
            axis.ticks = element_line(size = 1), axis.ticks.length = unit(5, "pt")) +
      stat_pvalue_manual(pvalue, label = "{pval.label(pvalue$p)}", bracket.size = 1, size = 4)
   plot
}

Проблема с этой строкой: stat_pvalue_manual(pvalue, label = "{pval.label(pvalue$p)}", bracket.size = 1, size = 4) Он говорит, что объект "pvalue" не найден. Но если я создаю этот объект вне функции и получаю его в среде R, он хорошо работает !!

Как это объяснить? И как с этим бороться?

Спасибо, Оливье

...