【问题标题】:Scatterplot function that can change based on variables for axes可以根据轴的变量更改的散点图函数
【发布时间】:2020-05-29 07:06:53
【问题描述】:

我正在尝试编写一个看起来应该非常简单的函数,但我遇到了问题。我想编写一个包含三个参数的函数:数据框、x 轴变量和 y 轴变量。基于这些,我希望它返回一个散点图,其中可以更改 x 轴变量和 y 轴变量。这是我写的非常基本的函数:

scatter_plot <- function(dataframe, x_input, y_input) {
  plot <- ggplot(data = dataframe) +
    geom_point(mapping = aes(x = x_input, y = y_input),
    )
}

为了重现性,请考虑ggplot2 包中的数据集midwest。我写的代码在运行时不会产生错误,但是当我尝试向其中传递参数时,例如

scatter_plot(midwest, percollege, percpovertyknown)

函数返回

"FUN(X[[i]], ...) 中的错误:找不到对象 'percollege'"

似乎它无法识别参数中的变量,但我已经使用该函数有一段时间了,但我似乎无法弄清楚。有人可以帮我解决这个问题,以便我的功能正常工作吗?

【问题讨论】:

标签: r ggplot2 tidyeval


【解决方案1】:

tidyverse 使用非标准评估 (NSE),这使得在函数中使用其设施比您预期的要复杂一些。这是适合我的函数版本。

scatter_plot <- function(dataframe, x_input, y_input) {
  qX <- enquo(x_input)
  qY <- enquo(y_input)
  plot <- ggplot(data = dataframe) +
    geom_point(mapping = aes(x = !! qX, y = !! qY),
    )
  return(plot)
}

当您将绘图分配给对象时,我添加了 return 语句。

有关 NSE 的更多信息,请参阅 here

【讨论】:

  • 我会使用aes(x = {{ x_input }}, y = {{ y_input }})
【解决方案2】:

在你的函数中使用!!rlang::ensym() 应该可以工作。

scatter_plot <- function(dataframe, x_input, y_input) {
  plot <- ggplot(data = dataframe) +
    geom_point(mapping = aes(x = !!rlang::ensym(x_input), y = !!rlang::ensym(y_input)))
  plot
}

例子

scatter_plot(midwest, percollege, percpovertyknown)

【讨论】:

猜你喜欢
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多