我正在尝试创建一个绘图函数,它具有一组默认值,并且可以通过在省略号(
错误是因为我试图将 asp 参数传递两次到 plot 中。到目前为止,我最好的笨拙尝试是编写 if-else 语句来考虑这一点(该方法已从 此处 修改)。
为了针对可以通过
该问题与 this one 相关,不同之处在于我想要自动覆盖由
...
)参数中使用plot
函数接受的任何参数来灵活更改这些值。例如:PlotIt <- function(x, y, ...) {
plot(x, y, type = "l", asp = 1, ...)
}
x <- 1:10
y <- 10:1
PlotIt(x = x, y = y)
# Returns a plot
PlotIt(x = x, y = y, asp = NA)
# Error in plot.default(x, y, type = "l", asp = 1, ...) :
# formal argument "asp" matched by multiple actual arguments
错误是因为我试图将 asp 参数传递两次到 plot 中。到目前为止,我最好的笨拙尝试是编写 if-else 语句来考虑这一点(该方法已从 此处 修改)。
PlotIt2 <- function(x, y, ...) {
mc <- match.call(expand.dots = FALSE)
if(names(mc$...) %in% "asp") {
plot(x, y, type = "l", ...)
} else {
plot(x, y, type = "l", asp = 1, ...)
}
}
PlotIt2(x = x, y = y, asp = NA)
# works
为了针对可以通过
...
参数设置的所有可能参数执行此操作,我需要编写一个很长的 if-else 语句。有没有更优雅的方法来实现这个功能?该问题与 this one 相关,不同之处在于我想要自动覆盖由
...
参数设置的所有参数。
match.call()
来解决这里描述的问题?我正在尝试学习match.call()
,但我更喜欢你的方法,它更直观。 - user63230