我希望能够打印通过管道传递的数据帧的名称。这可能吗?我能做到。
printname <- function(df){
print(paste(substitute(df)))
}
printname(mtcars)
#[1] "mtcars"
然而,它会返回&#34;。&#34;当使用magrittr
管道管道此功能时。
mtcars %>% printname
# [1] "."
在编写已记录的生产过程中使用的函数的自定义错误消息时,这将非常有用 - 如果日志中的唯一内容是&#34;则很难知道哪些内容失败了。&#34;
返回原始调用可能就足够了,其中包括mtcars %>%
段。
答案 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
信息在管道的开头找到符号。这还没有经过充分测试。