11

我正在尝试执行以下操作:

try(htmlParse(ip[1], T),

我将 a 定义为:

ip[1] = paste('http://en.wikipedia.org/wiki/George_Clooney')

我想检查 htmlParse 是否有效。对于我列表中的许多名称,将没有 wikipedia 站点,因此如果 wiki 页面不存在,我需要能够检查 ip[1] 并将其替换为 NA。

有人可以告诉我如何做到这一点。我尝试使用命令 geterrmessage(),但是我不确定每次更改名人姓名时如何刷新它。

目前我有以下内容:

if(!isTRUE(as.logical(grep(ip[1],err)))) {
    ip[1] = NA
    }
    else {

这绝对是不正确的,因为它没有运行我想要的逻辑语句。

谢谢

阿马尔

4

3 回答 3

30

我认为这个简单的示例应该可以帮助您:

res <- try(log("a"),silent = TRUE)
class(res) == "try-error"
[1] TRUE

基本思想是在try出现错误时(不可见地)返回类“try-error”的对象。否则,res将包含您传递给的表达式的结果try。IE

res <- try(log(2),silent = TRUE)
res
[1] 0.6931472

花一些时间?try仔细阅读,包括示例(我猜这些示例可能没有那么简单)。正如 GSee 下面所指出的,检查是否抛出错误的一种更惯用的方法是使用inherits(res,'try-error').

于 2012-07-03T18:13:50.623 回答
2

我会尝试从 wiki 下载所有名称(存在或不存在)并将其保存在单独的文件中。然后我将 grep 以下字符串Wikipedia 没有具有此确切名称的文章,对于不存在的文章,我会得到一个真值。通过这种方式,我相信您将确定解析器是否工作或名称不存在。此外,您可以根据下载文件的大小对下载的文件进行排序,以防您怀疑出现问题。损坏的尺寸较小。

虚构人物的维基百科文章 另外我会使用tryCatch函数来处理逻辑状态:

x<-3
tryCatch(x>5,error=print("this is an error"))
于 2017-04-10T08:38:21.330 回答
0

这是一个函数,它计算一个表达式并返回TRUE它是否有效,FALSE如果它不有效。您还可以在表达式中分配变量。

try_catch <- function(exprs) {!inherits(try(eval(exprs)), "try-error")}

try_catch(out <- log("a")) # returns FALSE
out # Error: object 'out' not found

try_catch(out <- log(1)) # returns TRUE
out # out = 0
于 2021-08-14T16:07:43.607 回答