Как получить имя входа функции в R при использовании каналов - PullRequest
3 голосов
/ 29 февраля 2020

Я пытаюсь записать имя входной переменной в виде строки символов. Это довольно легко, используя match.call(), однако это не работает при использовании труб magrittr. Хотите знать, есть ли какая-нибудь легкая модификация, которая заставила бы ее работать внутри каналов, а также если бы функция вызывалась нормально?

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

myfun(mean)
mean %>% myfun

myfun(iris)
iris %>% myfun

1 Ответ

1 голос
/ 29 февраля 2020

По умолчанию оператор канала %>% передает имя входной переменной в виде точки "." следующей функции, но вы можете управлять выводом из оператора канала 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"

Надеюсь, это поможет. -Ахмед Альхенди

...