尝试制作我自己的函数来绘制

Trying to make my own function that plots

提问人:inprogress123 提问时间:11/12/2023 最后编辑:inprogress123 更新时间:11/12/2023 访问量:41

问:

我还是 R 的新手,现在我正在尝试制作自己的函数,我将数据帧和列名传递给它并输出绘图。我想做这样的事情,但我想我做错了什么。假设数据帧的名称为 my_dataframe,列为 Age,并按 Species 分组。在此示例中,我还希望标题为“age”。然后:


    makePlot <- function(X,col1,col2) {
      p1 <- ggplot(X, aes(x = col1, fill = col2, y = col2)) + geom_point(aes(color = col2)) +
      labs(x = 'Label_x', y = 'Label_y', title = col1)
      return(p1)
    }
    make_rainplot(my_dataframe, Age, Species)

谢谢!

我在网上搜索过,但没有找到如何做到这一点的解释。

R ggplot2

评论

2赞 YBS 11/12/2023
函数名称为 。您应该调用相同的名称,而不是makePlotmake_rainplot

答:

0赞 I_O 11/12/2023 #1

除了@YBS指出的函数名称和调用之间的不匹配之外,您的函数还会尝试评估(此处:查找命名的对象),例如 Age 没有成功,因为外部没有这样的对象。my_dataframe

为了能够使用不带引号的对象名称作为 tidyverse 中使用的参数,您可以延迟计算,例如:ensym

makePlot2 <- function(X, col1, col2) {
  col1 <- ensym(col1) ## ensym: don't go looking for Age yet
  col2 <- ensym(col2)
  ggplot(X, aes(x = !!col1, ## !!: now try to find Age (within X)
                fill = !!col2, y = !!col2)) +
    geom_point(aes(color = !!col2)) +
    labs(x = 'Label_x', y = 'Label_y', title = col1)
}

评论

0赞 inprogress123 11/13/2023
这正是我想要的。谢谢!
0赞 I_O 11/13/2023
很高兴它奏效了!请注意,还有一个复数版本,可以一次性处理更多函数参数(全部在提供的非标准评估链接中)。如果解决方案适合您,请记得将答案标记为已接受,以便关闭工单。ensyms