检查是否存在URL列表

时间:2017-09-08 22:46:17

标签: r

拥有包含这样的网址的数据框:

df<- data.frame('urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010', 
                                            'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
                                            'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))

我尝试创建一个列表来检查每个url是否存在。我尝试生成一个有2列的数据帧。第一个是网址,第二个是TRUE,如果存在网址则为FALSE。

我使用此代码来实现它

library(RCurl)  
df_exist <- data.frame()
for (i in 1:nrow(df)) {
    url <- df$urls[i]
    exist <- url.exists(url)
    df_exist <- rbind(df_exist, data.frame( url = url,
                                         exist = exist))
}

但它给了我这个错误:

R Session Absorted
R encounterd a fatal error
The session was terminated

我无法理解我在修复它的代码中犯了什么错误。

2 个答案:

答案 0 :(得分:3)

在我看来,RCurl并不喜欢您的网址是因素。当我将它们转换为角色时,我没有遇到任何问题。

library(RCurl)  
df_exist <- data.frame()
for (i in 1:nrow(df)) {
    url <- as.character(df$urls[i])
    exist <- url.exists(url)
    df_exist <- rbind(df_exist, data.frame( url = url,
                                     exist = exist))

}

此外,无需编写for循环。阅读apply函数系列。就像是 sapply(df$urls, function(x) url.exists(as.character(x))) 应该得到相同的结果。

答案 1 :(得分:1)

我遇到了同样的问题,我做了类似的事情:

url_exists <- function(x) url.exists(as.character(x))
df_exist <- mutate(df, exist = sapply(urls, url_exists))