gpt4 book ai didi

r - 如何让 R 识别省略号中的参数向量?

转载 作者:行者123 更新时间:2023-12-01 23:30:46 25 4
gpt4 key购买 nike

我正在尝试巧妙地使用 R 中的省略号 (...) 参数,但遇到了一些问题。

我试图通过使用 ... 在函数的开头传递一些默认参数,而不会弄乱函数的参数区域,如果它们在那里提供则覆盖。但不知何故,省略号参数似乎并没有得到我的完整向量

test <- function(dat, 
# I don't want to have to put default col,
# ylim, ylab, lty arguments etc. here
...) {
# but here, to be overruled if hasArg finds it
color <- "red"
if(hasArg(col)) { # tried it with both "col" and col
message(paste("I have col:", col))
color <- col
}
plot(dat, col = color)
}

函数调用:

test(data.frame(x = 1:10, y = 11:20), col = c("purple", "green", "blue"))

抛出错误:

Error in paste("I have col:", col) (from #8) : 
cannot coerce type 'closure' to vector of type 'character'

所以这里出了点问题。如果我立即将省略号参数传递给 plot 函数,它确实可以正常工作。

最佳答案

如果您想在函数中使用它的内容,您需要通过收集/打包 ... 到一个列表中来做到这一点。

test <- function(dat, 
# I don't want to have to put default col,
# ylim, ylab, lty arguments etc. here
...) {
opt <- list(...)
color <- "red"
if(!is.null(opt$col)) { # tried it with both "col" and col
message(paste("I have col:", opt$col))
color <- opt$col
}
plot(dat, col = color)
}

test(data.frame(x = 1:10, y = 11:20), col = c("purple", "green", "blue"))

您的原始代码中的问题是 args()hasArg() 仅适用于函数调用中的形式参数。所以当你传入 col = c("purple", "green", "blue") 时,hasArg() 知道有一个形式参数 col,但不对其求值。因此,在函数内部,找不到实际的 col 变量(您可以使用调试器来验证这一点)。有趣的是,R base 包中有一个函数col(),所以这个函数被传递给了paste。因此,当您尝试连接字符串和“闭包”时会收到一条错误消息。

关于r - 如何让 R 识别省略号中的参数向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401902/

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