gpt4 book ai didi

r - 在函数定义期间评估并保存参数变量值?

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

考虑这个函数plus_x:

y <- 1

plus_x <- function(input, x = y){
return(input + x)
}

此处,xy 默认值在函数调用期间计算。如果我稍后更改 y,我也会更改函数的行为。

y <- 1

plus_x <- function(input, x = y){
return(input + x)
}

y <-10

plus_x(1)
# > 11

有没有办法将 y 的值“巩固”到函数定义期间的状态?

目标:

y <- 1

plus_x <- function(input, x = y){
# y is now always 1
return(input + x)
}

y <-10

plus_x(1)
# > 2

最佳答案

1) local 用在本地保存 ylocal 包围该函数:

y <- 1

plus_x <- local({
y <- y
function(input, x = y) input + x
})

y <-10
plus_x(1)
## [1] 2

2) 生成器 另一种方法是创建生成器函数。这样做的优点是可以轻松定义具有不同 y 值的多个不同函数。请查看 demo("scoping", package = "base") 了解使用范围的更多示例。

gen <- function(y) {
force(y)
function(input, x = y) input + x
}

y <- 1
plus_1 <- gen(y)
y <-10
plus_1(1)
## [1] 2

y <- 2
plus_2 <- gen(y)
y <- 10
plus_2(1)
## [1] 3

关于r - 在函数定义期间评估并保存参数变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72044741/

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