gpt4 book ai didi

r - 嵌套函数中的省略号扩展 : Error "..3 used in an incorrect context, no ... to look in"

转载 作者:行者123 更新时间:2023-12-04 11:51:31 24 4
gpt4 key购买 nike

我有以下代码片段:

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 而不是面板的参数的内容功能。

有没有办法避免这个问题?我怎样才能使功能工作吗?

最佳答案

据我了解,这不是因为嵌套 ... 而是因为第一个 ... 在条形图中。所以即使这样也行不通:

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 的参数。

关于r - 嵌套函数中的省略号扩展 : Error "..3 used in an incorrect context, no ... to look in",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com