gpt4 book ai didi

r - 捕获无法捕获的错误

转载 作者:行者123 更新时间:2023-12-04 11:49:52 25 4
gpt4 key购买 nike

我想从 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com