获取通过R中的管道传递的数据帧的名称

时间:2017-03-02 16:10:46

标签: r dplyr magrittr

我希望能够打印通过管道传递的数据帧的名称。这可能吗?我能做到。

printname <- function(df){
    print(paste(substitute(df)))
}
printname(mtcars)
#[1] "mtcars"

然而,它会返回&#34;。&#34;当使用magrittr管道管道此功能时。

mtcars %>% printname
# [1] "."

在编写已记录的生产过程中使用的函数的自定义错误消息时,这将非常有用 - 如果日志中的唯一内容是&#34;则很难知道哪些内容失败了。&#34;

返回原始调用可能就足够了,其中包括mtcars %>%段。

1 个答案:

答案 0 :(得分:11)

这是第一次尝试,它是一种黑客行为,但似乎它可能有效。

find_chain_parts <- function() {
    i <- 1
    while(!("chain_parts" %in% ls(envir=parent.frame(i))) && i < sys.nframe()) {
          i <- i+1
      }
    parent.frame(i)
}

printfirstname <- function(df){
    ee <- find_chain_parts()
    print(deparse(ee$lhs))
}

mtcars %>% printfirstname
# [1] "mtcars"

pipe函数创建一个跟踪链部分的环境。我尝试在当前执行环境中查找此变量,然后使用存储在那里的lhs信息在管道的开头找到符号。这还没有经过充分测试。