为什么deparse(substitute(x))没有选择'x'的名字

时间:2018-06-05 14:54:06

标签: r function arguments evaluation

我想知道为什么我deparse(substitute(x))的{​​{1}}未按预期为xlab添加x的名称(见下图) ?

xlab

enter image description here

1 个答案:

答案 0 :(得分:6)

原因是懒惰的评价。 (请不要让我解释详细信息。这很复杂,您可以使用language definition进行研究。但基本上,x会在xlab评估之前进行修改。)您可以使用force

轻松解决此问题
gg <- function(x, xlab = deparse(substitute(x)), ylab = NA, freq = FALSE, ...) {
  force(xlab)
  x <- round(x)
  ylab <- if(is.na(ylab) & freq) "Frequency" else if(is.na(ylab) & !freq) "Probability" else ylab
  z <- if(freq) table(x) else table(x)/length(x)
  plot(z, xlab = xlab, ylab = ylab, ...)
}
# Example of use:
gg(mtcars$gear)

resulting plot