gpt4 book ai didi

r - 惰性计算 : Why can't I use plot(. .., xlim = c(0,1), ylim = xlim)?

转载 作者:行者123 更新时间:2023-12-03 01:38:02 28 4
gpt4 key购买 nike

R 最大的功能之一是惰性求值。这导致了一种经常遇到的风格,即可以使用一个参数作为另一个参数的值。例如,在哈德利关于 Advanced R 的伟大著作中你看this example :

g <- function(a = 1, b = a * 2) {
c(a, b)
}
g()
#> [1] 1 2
g(10)
#> [1] 10 20

现在,我想使用 xlimylim 对绘图执行相同的操作,但是它不起作用:

> plot(1, 1, ylim = c(0,1), xlim = ylim)
Error in plot.default(1, 1, ylim = c(0, 1), xlim = ylim) :
object 'ylim' not found
> plot(1, 1, xlim = c(0,1), ylim = xlim)
Error in plot.default(1, 1, xlim = c(0, 1), ylim = xlim) :
object 'xlim' not found
  • 有人知道为什么吗?
  • 有办法仍然实现这一目标吗?

最佳答案

Quoting from the good manual:

4.3.3 Argument evaluation

One of the most important things to know about the evaluation of arguments to a function is that supplied arguments and default arguments are treated differently. The supplied arguments to a function are evaluated in the evaluation frame of the calling function. The default arguments to a function are evaluated in the evaluation frame of the function.

要了解这在实践中意味着什么,请创建一个函数,其中一个参数的默认值是另一个参数值的函数:

f <- function(x=4, y=x^2) {
y
}

当使用 y 调用时的默认值,R 会评估 y在函数调用的评估框架中,即在对函数的整个主体进行评估的同一环境中 - x 的地方更好的(当然确实)存在:

f() 
# [1] 16

当使用提供的值y调用时,R查看调用函数的求值框架(这里是全局环境),没有发现x ,并在错误消息中让您知道:

f(y=x^2)
# Error in f(y = x^2) : object 'x' not found

关于r - 惰性计算 : Why can't I use plot(. .., xlim = c(0,1), ylim = xlim)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818263/

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