我想知道为什么我的deparse(substitute(x))xlab没有像预期的那样放置xxlab的名称(请参见下图)?

gg <- function(x, xlab = deparse(substitute(x)), ylab = NA, freq = FALSE, ...) {
    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)    # 'mtcars' is a base R built-in dataset

r - 为什么deparse(substitute(x))不选择 &#39;x&#39;的名称-LMLPHP

最佳答案

原因是懒惰的评估。 (请不要让我解释细节。它很复杂,您可以使用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)

r - 为什么deparse(substitute(x))不选择 &#39;x&#39;的名称-LMLPHP

09-25 18:29