我创建了以下函数/示例作为在表格等中显示变量标签的通用方式:
#' Function to prettify the output of another function using a `var.labels` attribute
#' This is particularly useful in combination with read.dta et al.
#' @param dat A data.frame with attr `var.labels` giving descriptions of variables
#' @param expr An expression to evaluate with pretty var.labels
#' @return The result of the expression, with variable names replaced with their labels
#' @examples
#' testDF <- data.frame( a=seq(10),b=runif(10),c=rnorm(10) )
#' attr(testDF,"var.labels") <- c("Identifier","Important Data","Lies, Damn Lies, Statistics")
#' prettify( testDF, quote(str(dat)) )
prettify <- function( dat, expr ) {
labels <- attr(dat,"var.labels")
for(i in seq(ncol(dat))) colnames(dat)[i] <- labels[i]
attr(dat,"var.labels") <- NULL
eval( expr )
}
但是,我宁愿用户不必引用传入的表达式。
replicate
这样做,使用此代码:
eval.parent(substitute(function(...) expr))
然而,我不明白它是如何工作的,并且就像在没有理解的情况下尝试复制的典型情况一样,我尝试简单地复制此代码或修改它都失败了。
如何编写一个以未计算表达式作为输入的函数,而不要求用户输入quote
他们的表达式?我认为答案将在很大程度上依赖于惰性评估。