gpt4 book ai didi

r - 获取作为函数参数传递的变量名称

转载 作者:行者123 更新时间:2023-12-03 19:01:34 26 4
gpt4 key购买 nike

我试图以正确的方式捕获传递给函数的变量的名称。感兴趣的名字noi是数据框列或向量。下面是我的最小工作示例。理想情况下,我希望收到一个仅包含 "noi" 的字符向量。

library(dplyr)
df <- data.frame(noi = seq(1:3))

example_fun <- function( x ){
deparse(substitute(x))
}
结果取决于我构建输入的方式。现在我知道为什么会发生这种情况,但是无论我如何调用该函数,我将如何正确地做到这一点以获得所需的结果。
# Base
example_fun(df$noi)
[1] "df$noi"

# Pipe
df$noi %>% example_fun()
[1] "."

# Mutate
df %>% mutate(example_fun(noi))
noi example_fun(noi)
1 1 noi
2 2 noi
3 3 noi
提前致谢!

最佳答案

也许用另一个函数中的“注释”属性装饰该变量?请注意,您要装饰的变量必须直接包装在装饰函数中z ;否则,会引发错误(通过设计和稳健性)。

example_fun <- function(x){
attr(x, "comment")
}

z <- function(x) {
nm <- substitute(x)
nm <- as.character(
if (is.symbol(nm) && !identical(nm, quote(.))) {
nm
} else if (length(nm) > 1L && (identical(nm[[1L]], quote(`[[`)) || identical(nm[[1L]], quote(`$`)))) {
tail(nm, 1L)
} else {
stop("not a valid symbol or extract operator.", call. = match.call())
}
)
`comment<-`(x, nm)
}
输出
> example_fun(z(df$noi))
[1] "noi"
> z(df$noi) %>% (function(x) x + 1) %>% example_fun()
[1] "noi"
> df %>% mutate(example_fun(z(noi)))
noi example_fun(z(noi))
1 1 noi
2 2 noi
3 3 noi
> z(df[["noi"]]) %>% example_fun()
[1] "noi"
> with(df, z(noi)) %>% example_fun()
[1] "noi"
> z(with(df, noi)) %>% example_fun()
Error in z(with(df, noi)) : not a valid symbol or extract operator.
> df$noi %>% z()
Error in z(.) : not a valid symbol or extract operator.
...但这可能不是一种可靠的方法。以稳健的方式实现您想要的目标是极其困难的,尤其是在涉及管道时。我认为您应该阅读 Hadley 的 Advanced R并了解有关绑定(bind)和环境如何工作的更多信息。

关于r - 获取作为函数参数传递的变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64597644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com