使用bind_rows()和lapply()函数进行错误/异常处理

时间:2015-07-09 14:40:53

标签: r lapply rvest

我有一个从网址列表中删除表格的函数:

www_list <- c("http://www.hockey-reference.com/boxscores/2014/12/20/",
              "http://www.hockey-reference.com/boxscores/2014/12/21/",
              "http://www.hockey-reference.com/boxscores/2014/12/22/")

nhl14_15 <- bind_rows(lapply(www_list, getscore))

工作示例数据:

www_list <- c("http://www.hockey-reference.com/boxscores/2014/12/22/",
              "http://www.hockey-reference.com/boxscores/2014/12/23/",
              "http://www.hockey-reference.com/boxscores/2014/12/24/",
              "http://www.hockey-reference.com/boxscores/2014/12/25/")

nhl14_15 <- bind_rows(lapply(www_list, getscore))

但是,没有玩游戏的网址会破坏我的功能:

function addMessage() {
    if (textval != "") {
        text_string='<div class="alert-box round"><p class="text-left">' + userName + ':' + textval + '</p></div></br>';
        alert(text_string);
        $.ajax({
            type:"POST",
            url:"process.php",
            data: {'text_string': text_string},
            cache:false,
            success:function(){
                alert("submitted")
            }
        });
        $("input[type=text]:last").val("");
    }
    enterButton = 0;
}

我如何在我的函数中构建错误/异常处理以跳过中断的URL?

代码应该可以重现......

1 个答案:

答案 0 :(得分:3)

没有游戏时获得的表格具有完全其他结构。您可以检查colnames(boxscore)是否符合预期。作为一个例子,我包括一个功能的改编,检查列访客是否可用。

getscore <- function(www0) {

  require(rvest)
  require(dplyr)

  www <- html(www0)

  boxscore <- www %>% html_table(fill = TRUE) %>% .[[1]]

  if ("Visitor" %in% colnames(boxscore)){
    names(boxscore)[3] <- "VG"
    names(boxscore)[5] <- "HG"
    names(boxscore)[6] <- "Type"

  return(boxscore)
  }
}

使用此功能,您的示例不会中断:

www_list <- c("http://www.hockey-reference.com/boxscores/2014/12/22/",
              "http://www.hockey-reference.com/boxscores/2014/12/23/",
              "http://www.hockey-reference.com/boxscores/2014/12/24/",
              "http://www.hockey-reference.com/boxscores/2014/12/25/")

nhl14_15 <- bind_rows(lapply(www_list, getscore))