如何在使用管道时在 R 中获取函数输入名称
How to get a function input name in R whilst using pipes
我正在尝试将输入变量的名称捕获为字符串。使用 match.call()
相当容易,但是在使用 magrittr 的管道时这不起作用。想知道是否有任何简单的修改可以让它在管道内工作以及函数是否被正常调用?
library(magrittr)
myfun <- function(fun){
print(match.call()$fun %>% as.character())
}
myfun(mean)
mean %>% myfun
myfun(iris)
iris %>% myfun
默认情况下,管道运算符 %>%
将输入变量名称作为点 "."
传递给下一个函数,但您可以控制管道运算符 lhs
的输出传递给您输入变量的实际名称而不是函数中的点。请参阅下面的功能(编辑工作 with/without %>%
)
myfun <- function(x) {
x <- substitute(x)
if (x !="."){
print(deparse(x))
}else{
i <- 1
while(!("chain_parts" %in% ls(envir=parent.frame(i))) && i < sys.nframe()) {
i <- i+1
}
ee <- parent.frame(i)
print(deparse(ee$lhs))
}
}
mean %>% myfun()
[1] "mean"
myfun(mean)
[1] "mean"
希望对您有所帮助。
-艾哈迈德·阿尔亨迪
我正在尝试将输入变量的名称捕获为字符串。使用 match.call()
相当容易,但是在使用 magrittr 的管道时这不起作用。想知道是否有任何简单的修改可以让它在管道内工作以及函数是否被正常调用?
library(magrittr)
myfun <- function(fun){
print(match.call()$fun %>% as.character())
}
myfun(mean)
mean %>% myfun
myfun(iris)
iris %>% myfun
默认情况下,管道运算符 %>%
将输入变量名称作为点 "."
传递给下一个函数,但您可以控制管道运算符 lhs
的输出传递给您输入变量的实际名称而不是函数中的点。请参阅下面的功能(编辑工作 with/without %>%
)
myfun <- function(x) {
x <- substitute(x)
if (x !="."){
print(deparse(x))
}else{
i <- 1
while(!("chain_parts" %in% ls(envir=parent.frame(i))) && i < sys.nframe()) {
i <- i+1
}
ee <- parent.frame(i)
print(deparse(ee$lhs))
}
}
mean %>% myfun()
[1] "mean"
myfun(mean)
[1] "mean"
希望对您有所帮助。 -艾哈迈德·阿尔亨迪