r - 如何将数据框列作为参数传递给用户定义的函数?
问题描述
我想要做的是为一个类设置一个基本的用户定义函数,该函数将为一个预测变量针对目标变量创建一个箱线图。这是我的代码:
ggplot(data=df, aes(x=target, y=predictor)) + geom_boxplot(
aes(col=target), notch=TRUE)}
#Below is how I'm calling the function
BoxplotPredictorOnTarget(df$target, df$predictor)
我的问题是,有没有更优雅的方式可以在调用函数时使用数据框列名作为参数?如果能够基于相同的参数为结果箱线图的 x 和 y 轴添加名称,那就太好了。我也只是对它是如何工作的感到困惑。当我进行函数调用并将列名放在双引号中时,不使用数据框变量名和“$”运算符,它返回一个箱线图,它只是一条直线,轴没有任何意义,它们只是列名。我很困惑为什么使用列名的字符串作为参数不起作用,当它们被插入到函数中时,它应该和我只是写列名一样,对吧?
解决方案
我们可以将列名字符串转换为符号并计算
library(ggplot2)
BoxplotPredictorOnTarget <- function(df, target, predictor) {
ggplot(data = df, aes(x= !! rlang::ensym(target),
y= !! rlang::ensym(predictor))) +
geom_boxplot(aes(col= !! rlang::ensym(target)), notch=TRUE)
}
然后调用为
BoxplotPredictorOnTarget(df, 'target', 'predictor')
使用可重现的示例
data(iris)
BoxplotPredictorOnTarget(iris, 'Species', 'Sepal.Length')
-输出
推荐阅读
- github - 任何人都知道 Github 操作是否适用于同一个 repo 上的 2 个或多个跑步者?
- javascript - 替代使用回调
- javascript - 试图将元素移动到空数组中。代码运行,但没有返回任何内容
- node.js - 无法读取未定义的属性“文件名”使用带有 lambda 的 html-pdf
- flutter - 如何创建图像的可滚动网格视图
- node.js - MongoDB没有收到删除请求
- r - 您应该如何在 R 的调查包中使用带有 svydesign() 函数的缩放权重?
- python - 如何返回 TextEdit QML 的文本值
- java - 使用 Java 从 Selenium WebDriver 中的下拉列表中删除重复项
- html - 最小化浏览器时如何使徽标减小其大小?即使在移动设备上