r - 过滤函数不返回过滤后的df
问题描述
我有这样的功能:
sub_set <- function(var) {
varname <- enquo(var)
dict <- filter(dictionary, var == !!varname)
return(dict)
}
dict <- sub_set(Age)
这不起作用,因为它返回:
~Age 中的错误:找不到对象“Age”
如果我将函数称为:
dict <- sub_set("Age")
它可以工作,但是我需要在不带引号的情况下调用它,因为这个函数是也使用 (var) 的更大函数的一部分,并且引用它会破坏函数的其他部分。那么我怎样才能通过传递不带引号的参数来使其工作呢?
问候,
解决方案
用于enexpr
转换var
为name
类对象,然后转换为as_string
字符串。
library(dplyr)
library(rlang)
sub_set <- function(var) {
varname <- as_string(enexpr(var))
dict <- filter(dictionary, var == !!varname)
return(dict)
}
dictionary <- data.frame(var = c("Age", "x"), var2 = 1:2) # test data
dict <- sub_set(Age)
dict
## var var2
## 1 Age 1
碱基R
这也可以在基础 R 中轻松完成:
sub_set_base <- function(var) {
varname <- deparse(substitute(var))
subset(dictionary, var == varname)
}
sub_set_base(Age)
## var var2
## 1 Age 1
公式
另一个不涉及传递字符串的基本 R 设计是传递一个公式:
sub_set_fo <- function(fo) {
subset(dictionary, var == all.vars(fo))
}
sub_set_fo(~Age)
## var var2
## 1 Age 1
推荐阅读
- node.js - 来自 Firebase 的 Node.js 值未及时更新数组以进行函数调用(即使使用 Async Await)
- gradle - 没有为代码覆盖率生成 JaCoCo XML 报告
- quarkus - quarkus mongodb panache 中的字段级加密
- r - 如何在不使用 AIC 的情况下比较 2 个 lme4 混合模型?
- python - 如何修复 Tkinter 中的颜色滑块?
- azure - Apache Ignite 2.9.0 从丢失的分区中恢复
- xor - 逻辑门电路为 D 真
- java - 对象类型数组的 BubbleSort 无法正常工作
- shell - 如何在 Ansible shell/grep 命令中使用转义字符
- python - Discord.py 不发送 dm?