如何在使用管道时在 R 中获取函数输入名称

How to get a function input name in R whilst using pipes

提问人:gowerc 提问时间:2/29/2020 更新时间:3/2/2020 访问量:579

问:

我正在尝试将输入变量的名称捕获为字符串。这相当容易使用,但是在使用 magrittr 的管道时不起作用。想知道是否有任何简单的修改可以使其在管道中工作以及函数是否正常调用?match.call()

library(magrittr)
myfun <- function(fun){
    print(match.call()$fun %>% as.character())
}

myfun(mean)
mean %>% myfun

myfun(iris)
iris %>% myfun
R 马格里特

评论

5赞 jay.sf 2/29/2020
这回答了你的问题吗?获取在 R 中通过管道传递的数据帧的名称
2赞 Matt 2/29/2020
iris %>% {parent.frame(5)$lhs} %>% as.character

答:

2赞 Ahmed Alhendi 2/29/2020 #1

默认情况下,管道运算符将输入变量名称作为点传递给下一个函数,但您可以控制管道运算符的输出,以将输入变量的实际名称而不是函数中的点传递给您。请参阅以下函数(编辑为使用/不使用)%>%"."lhs%>%)

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"

希望它有所帮助。 -艾哈迈德·阿亨迪

评论

0赞 gowerc 2/29/2020
感谢您的回答,虽然此解决方案适用于管道情况,但它似乎不适用于常规情况,即myfun(mean)
0赞 Ahmed Alhendi 3/2/2020
我编辑了上面的乐趣,它应该可以与/不一起使用%>%