如何解决在 R 中的嵌套函数中提取参数名称
除非在另一个函数中调用该函数(见下文),否则它可以正常工作。
library(reprex)
print_data_1 <- function(DATA) {
DATA_txt <- deparse(substitute(DATA))
print(DATA_txt)
}
print_data_2 <- function(DF) {
print_data_1(DF)
}
print_data_1(mi_d)
#> [1] "mi_d"
print_data_2(mi_d)
#> [1] "DF"
print_data_2
应该返回“mi_d”。
由 reprex package (v2.0.0) 于 2021 年 5 月 14 日创建
解决方法
这是一种使用 rlang
的方法。这东西很快就变得非常先进了。
library(rlang)
print_data_1 <- function(DATA) {
.DATA <- enquo(DATA)
.DATA_txt <- as_name(.DATA)
print(.DATA_txt)
}
print_data_2 <- function(DF) {
.DF <- enquo(DF)
print_data_1(!!.DF)
}
print_data_1(mi_d)
#> [1] "mi_d"
print_data_2(mi_d)
#> [1] "mi_d"
等等...
print_data_3 <- function(X) {
.X <- enquo(X)
print_data_2(!!.X)
}
print_data_3(mi_d)
#> [1] "mi_d"
-
enquo()
将引用用户参数。 -
!!
会将参数取消引用到函数中。 -
as_name()
会将引用的参数转换为字符。
cheatsheet 和 rlang
小插曲非常有用。
要取回该对象的值,您可以在 quosure 上使用 eval_tidy()
。
print_data_1 <- function(DATA) {
.DATA <- enquo(DATA)
.DATA_txt <- as_name(.DATA)
df <- eval_tidy(.DATA)
print(.DATA_txt)
df
}
print_data_2(mtcars)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。