首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用"...“和“复制”

使用"...“和“复制”
EN

Stack Overflow用户
提问于 2011-07-15 16:40:58
回答 3查看 6.6K关注 0票数 19

sapplyreplicate的文档中,有一个关于使用...的警告

现在,我可以接受它,但我想了解它背后的原因。因此,我创建了这个人为设计的小示例:

代码语言:javascript
复制
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的所有调用中,我会得到这样的输出:

代码语言:javascript
复制
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

正如我所说的:文档似乎对此发出了警告,但我不明白为什么会这样。

EN

回答 3

Stack Overflow用户

发布于 2011-07-15 18:26:22

如果你看一下replicate的代码

代码语言:javascript
复制
> replicate
function (n, expr, simplify = TRUE) 
sapply(integer(n), eval.parent(substitute(function(...) expr)), 
    simplify = simplify)
<environment: namespace:base>

您会看到在父框架中对函数求值,其中来自调用函数的...不再存在。

票数 6
EN

Stack Overflow用户

发布于 2015-04-27 09:05:35

实际上有一种方法可以做到这一点:

代码语言:javascript
复制
# Simple function:
ff <- function(a,b) print(a+b)

# This will NOT work:
testf <- function(...) {
  replicate(expr = ff(...), n = 5)
}
testf(45,56) # argument "b" is missing, with no default

# This will:
testf <- function(...) {
  args <- as.list(substitute(list(...)))[-1L]
  replicate(expr = do.call(ff, args), n = 5)
}
testf(45,56) # 101
票数 1
EN

Stack Overflow用户

发布于 2018-03-07 23:11:48

另一种方法是:

代码语言:javascript
复制
g <- function(x, y) x + y

f <- function(a = 1, ...) {
    arg_list <- list(...)
    replicate(n = 3, expr = do.call(g, args = arg_list))
}

f(x = 1, y = 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6704536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档