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:通过与另一个函数合成来设置函数的参数。的主要内容,如果未能解决你的问题,请参考以下文章

怎么通过一组数据拟合出总体分布

R语言笔记 R中设置图形参数--函数par()详解

如何通过代码设置片段标签?

如何将 r ggplot 图存储为 html 代码片段

Swift6-函数

与另一个片段通信的片段接口