在定义

时间:2015-11-13 13:11:22

标签: r function error-handling

我正在努力解决一个被承认但我尚未找到一个简单解决方案的问题:当函数定义包含省略号或三个点时,如何捕获传递给R函数的错误指定的参数{{ 1}}。

如Wickham的 Advanced R 所述:

  

使用...需要付出代价 - 任何拼写错误的参数都不会引发   错误,...之后的任何参数必须完全命名。这使得   打字错误容易被忽视。

以下是一个例子:

...

在这里,myfun <- function(x, ...) UseMethod("myfun") myfun.character <- function(x, toLower = FALSE, ...) cat("Sent and transformed by myfun:", ifelse(toLower, tolower(x), x), "\n") myfun("Test String with CaPiTaLs.") ## Sent and transformed by myfun: Test String with CaPiTaLs. myfun("Test String with CaPiTaLs.", toLower = TRUE) ## Sent and transformed by myfun: test string with capitals. myfun("Test String with CaPiTaLs.", tolower = TRUE) ## Sent and transformed by myfun: Test String with CaPiTaLs. myfun("Test String with CaPiTaLs.", toLower = TRUE, notDefined = 1) ## Sent and transformed by myfun: test string with capitals. 的微妙拼写错误导致没有明显的错误,除非输出失败是小写的,正如用户可能期望的那样。在最后一个例子中,用户认为可以起作用的参数不是,但由于toLower的性质,它们只是消失在以太中。

当然,我可以检查......的内容,但我想知道是否有更好的方法,与函数中定义的形式或{{1}中定义的形式相关联传递。

顺便说一下,有人知道我们应该叫list(...)吗?我几乎可以肯定我在Julia文档中看到了一个带有名字的引用,但现在找不到了它!

加了:

理想情况下,如果参数不是应该在省略号中传递的,当被调用函数范围内的某些内容通过省略号传递给我时,我想找出生成错误的最佳方法。一个辅助论点。例如,如何最好地捕获这些错误:

...

1 个答案:

答案 0 :(得分:1)

我不会返回错误。警告应该足够了。像这样:

<ui:repeat >
    <p:row>
        <c:set var="campo" value="bean.filter.#{colunaAnalitico.value}"/>
        <p:column style="width: 2%">
            <p:selectBooleanCheckbox label="#{colunaAnalitico.key}" value="#{campo}"/>
        </p:column>
        <p:column>
            <p:outputLabel value="#{campo}"/>
        </p:column>                         
    </p:row>
</ui:repeat>

我不认为最后一个应该警告。你应该避免使用位置参数匹配,如果你在那里使用名称匹配,你会得到一个错误,你需要抓住它。