[英]Evaluate and save Argument variable value during function definition?
考慮這個 function plus_x
:
y <- 1
plus_x <- function(input, x = y){
return(input + x)
}
這里x
的y
默認值是在 function 調用期間計算的。 如果我稍后更改y
,我也會更改函數行為。
y <- 1
plus_x <- function(input, x = y){
return(input + x)
}
y <-10
plus_x(1)
# > 11
有沒有辦法將y
的值“固定”到 function 定義期間的 state?
目標:
y <- 1
plus_x <- function(input, x = y){
# y is now always 1
return(input + x)
}
y <-10
plus_x(1)
# > 2
1)本地用local
保存y
的本地包圍 function:
y <- 1
plus_x <- local({
y <- y
function(input, x = y) input + x
})
y <-10
plus_x(1)
## [1] 2
2) 生成器另一種方法是創建一個生成器 function。這樣做的好處是可以輕松定義具有不同 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
您可以使用as.function
定義 function,以便在構造 function 時評估默認值。
y <- 1
plus_x <- as.function(list(input = NULL, x = y, quote({
return(input + x)
})))
plus_x(1)
#> [1] 2
y <-10
plus_x(1)
#> [1] 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.