R:通过与另一个函数合成来设置函数的参数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R:通过与另一个函数合成来设置函数的参数。相关的知识,希望对你有一定的参考价值。
有什么方法可以让下面的代码在R中工作,而不将f定义为x和a的函数?
f=function(x) a*x
g=function(y){
a=2
return(f(y))
}
我的背景是,我正在组成几个函数,在每个阶段,一些函数的输出可能是后续函数的一个新参数。我想避免让每个函数的参数成为变量,因为(1)太多了,(2)有些函数需要向量输入,当把所有的参数作为标量输入添加到这些函数中时,会变得更加混乱。
答案
在环境中,可以定义 a
在新的环境中,调用 f
.
f <- function(x) a*x
g <- function(y){
env <- new.env()
env$a <- 2
environment(f) <- env
do.call(f, list(y), envir = env)
}
g(1:5)
#[1] 2 4 6 8 10
请注意,环境中的 f
并没有改变。
environment(f)
#<environment: R_GlobalEnv>
另一答案
在我看来,它有点像一个闭包,一个函数返回函数的漂亮的编程结构。
f <- function(a){
return(function(x) a*x)
}
g <- f(2)
g(3)
另一答案
我不知道下面的代码是否适合你的目标。
f <- function(...) prod(...)
g <- function(...) f(c(a=2,...))
另一答案
现在,我最终使用了超级赋值运算符,这对我的目的很有效。
f=function(x) a*x
g=function(y){
a<<-2
return(f(y))
}
以上是关于R:通过与另一个函数合成来设置函数的参数。的主要内容,如果未能解决你的问题,请参考以下文章