[英]Ellipsis expansion in nested functions: Error “'…' used in an incorrect context”
[英]Ellipsis expansion in nested functions: Error “..3 used in an incorrect context, no … to look in”
我有以下代碼片段:
require(lattice)
f.barchart <- function(...) {
barchart(...,
panel = function(x, y, ...) {
panel.barchart(x, y, ...)
}
)
}
x <- data.frame(a = c(1,1,2,2), b = c(1,2,3,4), c = c(1,2,2,1))
f.barchart(a ~ b, data = x, groups = c)
這導致拋出以下錯誤:
..3 used in an incorrect context, no ... to look in
當我使用以下定義時:
f.barchart <- function(...) {
substitute(barchart(...,
panel = function(x, y, ...) {
panel.barchart(x, y, ...)
}
))
}
我得到:
barchart(a ~ b, data = x, groups = c,
panel = function(x, y, ...) {
panel.barchart(x, y, a ~ b, data = x, groups = c)
})
我不確定這是否是導致上述錯誤的原因,但這意味着panel.barchart中的省略號會錯誤地擴展給f.barchart而不是panel函數的參數內容。
有辦法避免這個問題嗎? 如何使該功能起作用?
據我了解,發生這種情況並不是因為嵌套的……而是因為條形圖中的第一個……。 因此,即使這樣也不起作用:
f.barchart <- function(...) {
barchart(...)
}
x <- data.frame(a = c(1,1,2,2), b = c(1,2,3,4), d = c(1,2,2,1))
print(f.barchart(a ~ b, data = x, groups = d))
我認為這是因為...是barchart期待單個參數時的配對列表。 我們需要解壓縮配對列表,同時確保不要過早評估它。 以下是我的解決方案:
f.barchart <- function(...) {
cl<-match.call()
cl$panel=function(x, y, ...) {
panel.barchart(x, y, ...)
}
cl[[1]]=barchart
eval(cl)
}
我們使用match.call捕獲對f.barchart的調用,該調用將擴展點,將面板參數添加到調用中,將要調用的函數設置為barchart,然后評估該調用。 正如我們添加面板參數一樣,我們可以刪除f.barchart使用但不需要傳遞給barchart的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.