gpt4 book ai didi

r - 为什么 deparse(substitute(x)) 不选择 'x' 的名称

转载 作者:行者123 更新时间:2023-12-02 08:06:50 26 4
gpt4 key购买 nike

我想知道为什么 deparse(substitute(x)) 对于我的 xlab 没有将 x 的名称放入 xlab 如预期(见下图)?

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

enter image description here

最佳答案

原因是惰性求值。 (请不要让我解释细节。这很复杂,你可以用 language definition 研究这个。但基本上, xxlab 被评估之前被修改.) 您可以使用 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

关于r - 为什么 deparse(substitute(x)) 不选择 'x' 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50703092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com