r - 用 dplyr 编写函数
问题描述
我有这个功能
var_sup <- function(var1,var2)
{
df$RD <- ifelse(df[var1]>df[var2],1,0)
df$RD <- as.numeric(df$RD)
return(df)
}
我想用 dplyr 写来使用它:就像那样
var_sup(num,num2)
没有 ”” !
compare_sup <- function (var1,var2) {
# capture the argument without evaluating it
var1 <- quo_name(enquo(var1))
var2 <- quo_name(enquo(var2))
# construct the expression
df %>%
mutate(RD = ifelse(!!var1 > !!var2 ,1,0))
}
我试过了,但我有一个错误
谢谢你
解决方案
以下对我有用:
compare_sup <- function (var1,var2) {
require(tidyverse)
# capture the argument without evaluating it
var1 <- enquo(var1)
var2 <- enquo(var2)
# construct the expression
mtcars %>%
mutate(RD = ifelse(!!var1 > !!var2, 1, 0))
}
compare_sup(drat, wt) %>% head
# mpg cyl disp hp drat wt qsec vs am gear carb RD
#1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 1
#2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 1
#3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 1
#4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 0
#5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 0
#6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 0
我基本上quo_name()
从函数中删除了(并使用 mtcars 作为数据集)。
推荐阅读
- python - 简单的__双下划线作为变量名是什么意思?只是__不跟随另一个字符
- drupal - Drupal 8 多个子域使用相同的数据库和不同的设计
- ckeditor - CKEditor 5 按属性查找模型元素
- php - 产品最佳动态菜单 3 标签 php mysqli
- c# - 将字符串转换为十六进制后字符串中的奇数十六进制长度
- java - 从文本文件中读取姓名/电话号码并将它们存储到java中的数组中
- mongodb - MongoDB:高效的 $nin 运算符
- android - 尝试从 DialogFragment 获取回调到片段,但应用程序崩溃
- javascript - 带有分钟、秒和毫秒的 Javascript 降序计时器
- django - 如何使用内联结构迭代表单集