拥有包含这样的网址的数据框:
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
我无法理解我在修复它的代码中犯了什么错误。
答案 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))