簡體   English   中英

在 function 定義期間評估並保存參數變量值?

[英]Evaluate and save Argument variable value during function definition?

考慮這個 function plus_x

y <- 1

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

這里xy默認值是在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM