这种数据输入背后的基本原理是什么?

时间:2016-03-02 20:26:40

标签: r function global-variables

示例来自 rootsolve 包:

我们有这个功能:

gradient(f, x, centered = FALSE, pert = 1e-8, ...)

其中f是函数,x是向量的数据输入

现在,以下是正在运行的代码的实例:

logistic <- function (x, times) {
with (as.list(x),
{
N <- K / (1+(K-N0)/N0*exp(-r*times))
return(c(N = N))
})
}
# parameters for the US population from 1900
x <- c(N0 = 76.1, r = 0.02, K = 500)
# Sensitivity function: SF: dfi/dxj at
# output intervals from 1900 to 1950
SF <- gradient(f = logistic, x, times = 0:50)

我的问题是代码如何理解在其例程中使用times。它没有全局定义,也不是函数输入列表的一部分。当输入未在其结构中定义时,是否可以将输入传递给函数? ...在这里发挥作用吗?

1 个答案:

答案 0 :(得分:3)

...只是一种获取额外参数并将它们传递给另一个函数的方法。

简单示例:

power.function <- function(x,power) { x^power }
apply.function <- function(f, data, ...) { f(data, ...) }
sample <- c(1,2,3)
apply.function (power.function, sample, power = 3)

# which is the same as

apply.function (power.function, sample, 3)

产生

> apply.function (power.function, sample, 3)
[1]  1  8 27

修改

为了清楚明白,如果你查看rootSolve::gradient的来源,你会将定义视为

function (f, x, centered = FALSE, pert = 1e-08, ...)

并进一步调用

reff <- f(x, ...)

与上面示例中描述的相同。