代码之家  ›  专栏  ›  技术社区  ›  waanders

R中的函数和try()

  •  14
  • waanders  · 技术社区  · 14 年前

    仍在为R而挣扎,尤其是在错误处理方面:

    result <- try(sqlSave(ch,df,tablename="tblTest"))
    

    我可以使用:

    if (class(result) != "try-error")
    

    检查是否出了问题。没问题。

    但如果我用 try 与函数结合使用时,它不能像我预期的那样工作:

     result <- try(ch<-odbcConnect("TEST"))
    

    给出“-1”表示 result “整数”表示 class(result)

    ch<-odbcConnect("TEST")
    if (ch != -1)
    

    geterrmessage() 对于错误消息?

    1 回复  |  直到 12 年前
        1
  •  10
  •   Marek    14 年前

    odbcConnect 给你一个警告。错误是由ODBC驱动程序生成的,在中不是错误 try 意义( geterrmessage() 也不起作用)。

    你可以用 tryCatch 要处理这个问题,例如:

    tryCatch(odbcConnect("TEST"), warning=function(w) print("FAIL!"))
    


    -1是 odbcDriverConnect

    stat <- .Call(C_RODBCDriverConnect, as.character(connection), 
            id, as.integer(believeNRows), as.logical(readOnlyOptimize))
    if (stat < 0L) {
         warning("ODBC connection failed")
         return(stat)
    }
    

    因此,您将以无错误(并带有警告)和来自C级的整数代码结束。实际上,当连接也成功(但等于1)时,返回此代码。 try-error .
    这不是问题 尝试 和功能,但具体的功能( ODBC驱动器连接

    ch <- odbcConnect("TEST")
    if (ch != -1)
    

    tryCatch公司 你能做到的

    tryCatch(ch<-odbcConnect("TEST"), warning=function(w) print("FAIL!"))
    

    它创造了 ch 成功时为变量,失败时为打印消息。
    或者

    ch <- tryCatch(odbcConnect("TEST"), warning=function(w) {print("FAIL!");return(NA)})
    

    它总是创造 中国 变量,但如果发生故障 NA 价值观。