内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
在文件中sapply
和replicate
有一个关于使用...
创造了一个小例子:
innerfunction<-function(x, extrapar1=0, extrapar2=extrapar1) { cat("x:", x, ", xp1:", extrapar1, ", xp2:", extrapar2, "\n") } middlefunction<-function(x,...) { innerfunction(x,...) } outerfunction<-function(x, ...) { cat("Run middle function:\n") replicate(2, middlefunction(x,...)) cat("Run inner function:\n") replicate(2, innerfunction(x,...)) } outerfunction(1,2,3) outerfunction(1,extrapar1=2,3) outerfunction(1,extrapar1=2,extrapar2=3)
有人能解释为什么,在上面所有的outerfunction
,我得到这个输出:
Run middle function: x: 1 , xp1: 0 , xp2: 0 x: 1 , xp1: 0 , xp2: 0 Run inner function: x: 1 , xp1: 0 , xp2: 0 x: 1 , xp1: 0 , xp2: 0
?replicate
在示例部分中,明确地告诉我们试图做的事情不起作用,也不会起作用。在Note
分节?replicate
我们有:
If ‘expr’ is a function call, be aware of assumptions about where it is evaluated, and in particular what ‘...’ might refer to. You can pass additional named arguments to a function call as additional named arguments to ‘replicate’: see ‘Examples’.
如果我们看看例子,我们会发现:
## use of replicate() with parameters: foo <- function(x=1, y=2) c(x,y) # does not work: bar <- function(n, ...) replicate(n, foo(...)) bar <- function(n, x) replicate(n, foo(x=x)) bar(5, x=3)
我对这些文档的解读是,它们所做的远不止是警告您使用...
在replicate()
调用;它们显式地记录它不工作。该帮助文件中的大部分讨论与...
论辩其他职能,但不一定replicate()
...
如果你看一下replicate
:
> replicate function (n, expr, simplify = TRUE) sapply(integer(n), eval.parent(substitute(function(...) expr)), simplify = simplify) <environment: namespace:base>
在父框架中计算函数,其中...
从您的调用函数中不再存在。