![](/img/trans.png)
[英]Ellipsis expansion in nested functions: Error “..3 used in an incorrect context, no … to look in”
[英]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.