r - 捕获无法捕获的错误

标签 r

我想从 D%4 中捕获错误继续前进。错误是:

Error: unexpected input in "D%4"

通常,如果正在调用函数,则以下工作:
capture_warn_error <- function(x){
    tryCatch({
        x
    }, warning = function(w) {
        w
    }, error = function(e) {
        e
    })
}

capture_warn_error(D%4) 

但是无法恢复,因为`D%4 会立即关闭所有内容:
## > capture_warn_error(D%4)
## Error: unexpected input in "capture_warn_error(D%4)"

有没有办法捕捉到如此顽固的野兽并继续前进?我知道 D%4不是对象,但这适用于其他非对象:
capture_warn_error(means)
## <simpleError in doTryCatch(return(expr), name, parentenv, handler): object 'means' not found>

很高兴:
  • 了解原因 D%4不可恢复 vs means
  • 找到恢复静止和捕获的方法 D%4的错误
  • 最佳答案

    正如其他人所说,这是因为在控制台输入的文本会传递给解析器。 D%4未能通过有效 R 表达式的严格测试,因为单个 %在 R 名称中无效(尽管它会创建一个 token ,如果存在结束 %%,该 token 将被解释为用户定义的函数)也不是函数名(尽管 %% 是)。错误发生在处理函数的参数时,因此它从未到达内部 tryCatch -称呼。我最初不知道您想将此输入解析为 R 代码,因此认为只需包装 readline因为要输入的单个参数可能满足:

    mfun <- function( x=readline(">>+ ") ){ print(x) }
    mfun()
    #-----screen will display--------
    >>+ D%4
    [1] "D%4"
    

    如果我对您的意图有误,因为它出现在重新阅读问题时,那么这会将输入机制构建到您的 capture_error 函数中。这会将这些字符作为未解析的文本引入,然后在 tryCatch 中执行解析评估 shell :
    > capture_warn_error <- function(x=readline(">>+ ")){
    +     tryCatch({ eval(parse(text=x))
    +         
    +     }, warning = function(w) {
    +         w
    +     }, error = function(e) {
    +         e
    +     })
    + }
    > capture_warn_error(D%4)
    Error: unexpected input in "capture_warn_error(D%4)"
    > capture_warn_error()
    >>+ D%4
    <simpleError in parse(text = x): <text>:1:2: unexpected input
    1: D%4
         ^>
    > err <- capture_warn_error()
    >>+ D%4
    > err
    <simpleError in parse(text = x): <text>:1:2: unexpected input
    1: D%4
         ^>
    
    > err <- capture_warn_error()
    >>+ D %% 4
    > err
    <simpleError in D%%4: non-numeric argument to binary operator>
    > err <- capture_warn_error()
    >>+ 4 %smthg% 2
    > err
    <simpleError in eval(expr, envir, enclos): could not find function "%smthg%">
    

    如上所示,它确实要求您不要在参数列表中向函数调用提供任何输入,而是使用空参数列表进行捕获调用。

    关于r - 捕获无法捕获的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398614/

    相关文章:

    r - 确定最佳簇数并使用 Daisy 函数和 Gower 相似度

    r - 在 r 中的三列数据框中制作从、到网络

    r - 如何根据唯一项目 ID 对列中的项目值求和?

    r - 填充 geom_curve ggplot2 上的箭头

    r - R 中的数据转换

    通过不影响其中包含该词的其他名称从字符串中删除词

    r - 使用 "shinyAppDir"函数在单个 Rmarkdown 文件中嵌入多个 Shiny 的应用程序

    r - 基于其他列 R 中的条件的数学操作

    css - 自定义 selectInput 的背景颜色为 Shiny

    r - 在 R 中实现就地修改算法