gpt4 book ai didi

R:Promise 找不到对象

转载 作者:行者123 更新时间:2023-12-04 18:01:13 25 4
gpt4 key购买 nike

我知道您可以在 R 中编写一个函数,其中参数的默认值是使用同一函数的另一个参数。

foo <- function(a, b = length(a)) {
b
}

foo(a = c(1, 2))
[1] 2

但是,一旦我在实际的函数调用中使用相同的参数,我就会收到一个错误:
foo(a = c(1, 2), b = length(a))
Error in foo(a = c(1, 2), b = length(a)) : object 'a' not found

我以为 b = length(a)的 promise 应该在函数内部求值,其中 a是已知的,但显然这并没有发生。有人可以解释问题出在哪里以及我如何制作
foo(a = c(1, 2), b = length(a))

工作?

最佳答案

输入时 foo(a = c(1, 2), b = length(a)) , a必须来自调用环境,而不是函数环境。你需要使用:

x <- 1:2
foo(a = x, b = length(x))

或者使用函数参数:
foo <- function(a, fun = length) { fun(a) }

报价 Hadley :

More technically, an unevaluated argument is called a promise, or (less commonly) a thunk. A promise is made up of two parts:

  • The expression which gives rise to the delayed computation. (It can be accessed with substitute(). See non-standard evaluation for more details.)

  • The environment where the expression was created and where it should be evaluated.



你说得对,参数是 promise ,直到需要时才进行评估。但是,promise 包括创建它的环境,在这种情况下是全局环境。

关于R:Promise 找不到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185726/

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