生成ggplot并从函数调用返回输出

时间:2017-10-05 13:27:13

标签: r function ggplot2 environment

创建ggplot作为函数调用的副作用时遇到问题:

MWE:

library(ggplot2)

dat <- data.frame(x = 1:10,
  y = rnorm(10, 11:20),
  id = sample(letters[1:3], 10, replace= T))

MegaFunction <- function(df) {
  # do something to the data
  df$y <- df$y - 10
  # plot it
  NicePlot(df)
  # return output
  return(df)
}

NicePlot <- function(x) {
  ggplot(x, aes(x = x, y = y, col = id)) +
    geom_point()
}

MegaFunction(dat)  # returns values, but doesn't plot
out <- MegaFunction(dat)  # returns values as out
NicePlot(out)      # plots values successfully

所以问题是我无法使用MegaFunction创建绘图,但是当我在MegaFunction的输出上调用NicePlot时(我可以预期),我可以这样做。这可能与调用函数的环境有关,但我无法弄明白。有任何想法吗?在基数R中,这确实有效。

1 个答案:

答案 0 :(得分:0)

正如@Marco Sandri指出的那样,我只需将包装函数包装在print命令中。

print(NicePlot(df))