gpt4 book ai didi

r - R 中的函数和 try()

转载 作者:行者123 更新时间:2023-12-03 20:51:57 26 4
gpt4 key购买 nike

仍在与 R 斗争,尤其是在错误处理方面:

如果我使用:

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

我可以用:
if (class(result) != "try-error")

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

但是如果我使用 try结合一个函数,它不能像我预期的那样工作:
 result <- try(ch<-odbcConnect("TEST"))

result 提供“-1”和“整数”为 class(result)
所以我应该使用
ch<-odbcConnect("TEST")
if (ch != -1)

并使用 geterrmessage()对于错误信息?

最佳答案

如果您仔细阅读错误消息,您会看到 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 . try没有问题和功能,但特定于此特定功能( odbcDriverConnect )。

您当然可以像在您的示例中一样使用此行为
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)})

总是创建 ch可变但在失败的情况下有 NA值(value)。

关于r - R 中的函数和 try(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3440373/

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