R 避免通过(…)传递参数重复
我有一个函数R 避免通过(…)传递参数重复,r,R,我有一个函数 somefun <- function(someparameters , ...) { plot(stuff, ...)} somefun <- function(someparameters, main, xlab, ylab, xlim....) 但我宁愿不那样做 有什么简单简洁的解决方案可以实现这一点吗?请尝试modifyList如下所示: f <- function(x, ...) { defaults <- list(xlab = "x
somefun <- function(someparameters , ...) { plot(stuff, ...)}
somefun <- function(someparameters, main, xlab, ylab, xlim....)
但我宁愿不那样做
有什么简单简洁的解决方案可以实现这一点吗?请尝试
modifyList
如下所示:
f <- function(x, ...) {
defaults <- list(xlab = "x", ylab = "y")
args <- modifyList(defaults, list(x = x, ...))
do.call("plot", args)
}
<代码> f> p>您可以考虑使用RLAN的List2函数
my_dots <- rlang::list2(...)
my\u dots你反对什么有趣的东西它不整洁。似乎没有必要,当我将此代码放入包中时,这些参数将显示在文档中。我认为您的用户将希望在文档中使用这些参数,因此建议使用Henry的建议。我更希望保持绘图的原样。这只是一个预防措施,这样我的函数就不会抛出错误,如果有人真的想修改某些东西。我不打算提供灵活的参数,用户可以根据自己的内心内容进行自定义。谢谢您的回答。但是,现在如何让列表充当参数?i、 e.绘图(1,2,args)
在这种情况下肯定不起作用case@Ellipsis这就是do.call的神奇之处:它将参数作为一个列表。另请参见?do.call
+1对于修改列表
,我不知道。我会处理match.call()
结果,但结果远不如此整洁。@省略号,我已对其进行了修改,以给出一个plot
示例。请注意,这将打破惰性计算。这对你的工作可能重要,也可能不重要。
if( has_name(my_dots, "xlab") ){
xlab <- my_dots$xlab
} else {
xlab <- ""
}