函数内的 ggplot 不能完全工作

ggplot within function does not fully work

我正在尝试使用自定义函数在两组百分比之间创建 Bland-Altman 图,该函数在其中使用 ggplot 来生成图。

Perc1 <- sample(1:100, 100)
Perc2 <- sample(1:100, 100)
d <- data.frame(Perc1, Perc2)

bland <- function(dat, x, y){
  df <- subset(dat[ ,c(x, y)])
  df$avg <- rowMeans(df)
  df$diff <- df[[1]] - df[[2]]
  mean_diff <- mean(df$diff)
  lower <- mean_diff - 1.96 * sd(df$diff)
  upper <- mean_diff + 1.96 * sd(df$diff)
  p <- ggplot(df, aes(x = avg, y = diff)) +
    geom_point(size=2) +
    geom_hline(yintercept = mean_diff) +
    geom_hline(yintercept = lower, color = "red", linetype="dashed") +
    geom_hline(yintercept = upper, color = "red", linetype="dashed") +
    ggtitle("Bland-Altman Plot") +
    ylab("Difference Between Measurements") +
    xlab("Average Measurement")
  plot(p)
}

bland(d, Perc1, Perc2)

然而,当我运行函数none的线条是用图表产生的,但是标题和x/y标签是。如果有人能解释为什么会这样,那就太好了,在此先感谢。

试试这个:

(另请注意,p <-plot(p) 不需要作为函数 returns 最后一个对象。)

library(tidyverse)

Perc1 <- sample(1:100, 100)
Perc2 <- sample(1:100, 100)

bland <- function(x, y){
  df <- data.frame(x, y)
  df$avg <- rowMeans(df)
  df$diff <- df[[1]] - df[[2]]
  mean_diff <- mean(df$diff)
  lower <- mean_diff - 1.96 * sd(df$diff)
  upper <- mean_diff + 1.96 * sd(df$diff)
  p <- ggplot(df, aes(x = avg, y = diff)) +
    geom_point(size=2) +
    geom_hline(yintercept = mean_diff) +
    geom_hline(yintercept = lower, color = "red", linetype="dashed") +
    geom_hline(yintercept = upper, color = "red", linetype="dashed") +
    ggtitle("Bland-Altman Plot") +
    ylab("Difference Between Measurements") +
    xlab("Average Measurement")
  plot(p)
}

bland(Perc1, Perc2)

reprex package (v2.0.1)

创建于 2022-05-17