R 具有默认参数和。。。在dots_列表(…)中引发错误:承诺已在评估中

R 具有默认参数和。。。在dots_列表(…)中引发错误:承诺已在评估中,r,ellipsis,R,Ellipsis,我有一个带有默认参数和。。。例如: library(shiny) foo <- function(id = NULL, title = "Title", icon = icon("caret-right"), ...) { tags$div(class = "divcl", id = id, tags$h3(class = "hea", title, tags$s

我有一个带有默认参数和。。。例如:

library(shiny)
foo <- function(id = NULL, title = "Title",
                icon = icon("caret-right"),
                ...) {
  tags$div(class = "divcl", id = id,
           tags$h3(class = "hea", title,
                   tags$span(class = "spancl", icon)),
           ...)
}
但是当我想使用
图标
标题
的默认参数时,就像:

foo(id = "id", icon = icon("cars"), tags$div())
foo(id = "id", tags$div())
我得到这个错误:

dots_列表中出现错误(…):承诺已在评估中: 递归默认参数引用还是早期问题


我做错了什么?如何让它工作?

请记住,R按名称或位置匹配参数

由于您传递的参数(即,
标记$div()
)未命名,因此它被用作第一个名称不匹配的参数。这是两种情况下的
标题

您可以通过在函数顶部放置
browser()
语句来验证调用它,然后在控制台上键入
title
list(…)

您可以通过使用
仅向函数传递命名参数来解决此问题。或者重新排列函数定义中参数的顺序


最后,请注意,只有一个调用出错,因为,…,嗯,您的参数的形式是
icon=icon
;请参阅。

这是否回答了您的问题不幸的是,我无法为…使用命名参数。。。因为可能会有很多div标记或任何HTML标记。我不是100%地遵循重新安排的方法。有没有一种方法可以使第二个示例在不更改参数名称的情况下工作?您必须传递函数的所有其他参数,例如,
foo(id=“id”,icon=icon(“cars”),title=“Some title”,tags$div())
。嗯,是的,这是我一直在做的,但我希望,我可以使用函数的默认参数。如果要使用未命名参数,它们将始终按位置匹配。或者,您可以将所有当前命名的参数组合到一个列表中,使其成为单个参数,然后使用
作为第二个参数。