R:使用package :: function作为字符串在R中获取调用的函数名称

时间:2018-06-18 07:11:34

标签: r

假设我的命名空间中包含函数pack的包foo。 我想将函数pack::foo传递给另一个函数giveArgumentFunctionName

giveArgumentFunctionName <- function(func)
{
    ## Get name of function argument
    function.name <- someFunction(func)

    return (function.name)
}

以便函数将没有包名的传递函数名输出为字符串。与此相似的东西

> test <- giveArgumentFunctionName(pack::foo)
> test
"foo"

使用deparse(substitute(foo::bar))match.call()解决了类似问题,但前者给出了变量名称,如果函数被分配给一个,并且在调查后一个解决方案时挫败感占了上风。怎么能解决这个问题?

2 个答案:

答案 0 :(得分:2)

我认为substitute可能是你的朋友。来自文档:

  

substitute返回(未评估的)表达式expr

的解析树

这允许您访问函数内的(未评估的)表达式pack::foo

以下内容会产生您期望的结果:

giveArgumentFunctionName <- function(func) {
  function.name <- as.character(substitute(func))[[3]]
  return (function.name)
}

giveArgumentFunctionName(pack::foo)
# [1] "foo"
giveArgumentFunctionName(pack::bar)
# [1] "bar"

答案 1 :(得分:1)

也许是这样的:

doit <- function(.){
  s <- substitute(.)
  d <- sapply(s, deparse)
  if(d[[1]] %in% c(":::", "::")){
    if(length(d)>2) d[3]
  } else d
}

它会返回第二个组件,例如first :: second和first ::: second,以及desarsed参数(作为字符向量)。