gpt4 book ai didi

r - 在 R 中编写函数,牢记作用域

转载 作者:行者123 更新时间:2023-12-03 09:07:29 25 4
gpt4 key购买 nike

我经常编写需要查看环境中其他对象的函数。例如:

> a <- 3
> b <- 3
> x <- 1:5
> fn1 <- function(x,a,b) a+b+x
> fn2 <- function(x) a+b+x
> fn1(x,a,b)
[1] 7 8 9 10 11
> fn2(x)
[1] 7 8 9 10 11

正如预期的那样,这两个函数是相同的,因为 fn2执行时可以“看到”a 和b。但是每当我开始利用这一点时,在大约 30 分钟内,我最终会在没有任何必要变量(例如 a 或 b)的情况下调用该函数。如果我不利用这一点,那么我会觉得我在不必要地传递对象。

明确说明函数需要什么更好吗?还是应该通过内联注释或函数的其他文档来处理?有没有更好的办法?

最佳答案

如果我知道我将需要一个由某些值参数化并重复调用的函数,我会通过使用闭包来避免全局变量:

make.fn2 <- function(a, b) {
fn2 <- function(x) {
return( x + a + b )
}
return( fn2 )
}

a <- 2; b <- 3
fn2.1 <- make.fn2(a, b)
fn2.1(3) # 8
fn2.1(4) # 9

a <- 4
fn2.2 <- make.fn2(a, b)
fn2.2(3) # 10
fn2.1(3) # 8

这巧妙地避免了引用全局变量,而是将函数的封闭环境用于 a 和 b。调用 fn2 实例时,修改全局变量 a 和 b 不会导致意外的副作用。

关于r - 在 R 中编写函数,牢记作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169534/

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