R 可以根据轴的变量进行更改的散点图函数

R 可以根据轴的变量进行更改的散点图函数,r,ggplot2,tidyeval,R,Ggplot2,Tidyeval,我试图写一个函数,它似乎应该是非常简单的,但我有它的问题。我想写一个包含三个参数的函数:数据帧、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

我试图写一个函数,它似乎应该是非常简单的,但我有它的问题。我想写一个包含三个参数的函数:数据帧、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),
    )
}
函数返回

FUN(X[[i]],…)中出错:未找到对象“percollege”

它似乎无法识别参数中的变量,但我已经在函数中玩了很长时间,似乎无法理解它。有人能帮我解决这个问题,让我的功能正常工作吗?

使用
!!函数中的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
}

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)
}

散点图是否回答了您的问题?我经常使用
aes_string
,这也是我在上面发布的帖子中的答案之一。我认为这可以很好地融入到您现在的代码中。@4rj4n显然,
aes\u string
现在已经不受欢迎了:啊,谢谢。我没有注意到。因此,这里推荐使用
aes\uuu
,它也可以使用字符串,我明白了。@4rj4n不,本网站上没有提到过任何函数。建议进行整洁的评估,正如您在这里或上的答案中所看到的,我将使用
aes(x={{x\u input}},y={{y\u input}})
。我不知道双花括号。。它们与ensym的区别是什么?你有一个参考链接,我可以在其中研究它们的用法吗?有,主要的区别是,使用花括号,你可以传递任何表达式,而不仅仅是变量名。例如,
color=
cut_number(x,3)`如果您使用
{
来隧道参数,那么它将正常工作。我将使用
aes(x={{x_input},y={{y_input})
scatter_plot(midwest, percollege, percpovertyknown)
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)
}