簡體   English   中英

嵌套函數中的省略號擴展:錯誤“'...'在不正確的上下文中使用”

[英]Ellipsis expansion in nested functions: Error “'…' used in an incorrect context”

我有一段非常簡單的代碼可以產生:

afun <- function(a) {
  return(bfun(...))
}
bfun <- function(...) {
  return(a + 1)
}

> afun(1)
Error in afun(1) : '...' used in an incorrect context

但是R在這里不喜歡什么?

在你的函數afun

afun <- function(a) {
  return(bfun(...))
}

...只是一個參數(沒有默認值),就像任何其他參數一樣。 它並不意味着“自動吸收傳遞給父函數的所有參數”。 就像你已經將bfun定義為:

bfun <- function(b) {
  return(b + 1)
}

然后試着做:

afun <- function(a) {
  return(bfun(b))
}

為了將a傳遞給bfun ,你要么必須使用match.call東西自己收集該參數,要么必須對其進行硬編碼(例如return(bfun(a)) ),或者你必須使用...作為一個論證(和唯一的論點)來afun

通常, ...用於將其他參數傳遞給后續函數。

如果你想要afun返回帶有可變數量參數的函數,只需返回bfun作為afun的返回值。 在R中,這些被稱為閉包

這就是你得到的:

afun <- function(a) {
        print(a)
        function (b, ...){
                print(paste(b, ..., sep = " "))
        } 
}

結果是:

bfun <- afun("in afun body")    # "in afun body from print(a)

bfun("arg1")                    # "arg1" from  print(paste(b, ..., sep = " ")) 
bfun("arg1", "arg2", "arg3")    # "arg1 arg2 arg3" from  print(paste(b, ..., sep = " "))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM