r - 将变异应用于 R 中的数据帧:重复一个额外的步骤并导致错误
问题描述
我想知道为什么我的 get_http_status 函数会重复多次导致异常
我有一个数据框,例如:
> str(df5)
'data.frame': 10 obs. of 3 variables:
$ text : chr "\n" "\n" "\n" "\n" ...
$ enlace: chr "//www.blogger.com| __truncated__ ...
$ Freq : int 1 1 1 1 1 1 1 1 1 r code here
我正在尝试使用此函数获取每个“enlace”的 http 状态代码:
get_http_status <- function(url){
if (!is.null(url)){
Sys.sleep(3)
print(url)
ret <- HEAD(url)
return(ret$status_code)
}
return("")
}
df44 <- mutate(df5, status = get_http_status(enlace))
但不断抛出错误:
** Error in parse_url(url) : length(url) == 1 is not TRUE**
我可以用 try/catch 扭曲函数并且它可以工作,但我不知道为什么首先会发生错误。
get_http_status_2 <- function(url){
tryCatch(
expr = {
Sys.sleep(3)
print(url)
ret <- HEAD(url)
return(ret$status_code)
},
error = function(e){
return("")
}
)
}
df5$enlace 的内容是:
> df5$enlace
[1] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Attribution&widgetId=Attribution1&action=editWidget§ionId=footer-3"
[2] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=BlogArchive&widgetId=BlogArchive1&action=editWidget§ionId=sidebar-right-1"
[3] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=BlogSearch&widgetId=BlogSearch1&action=editWidget§ionId=sidebar-right-1"
[4] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Followers&widgetId=Followers1&action=editWidget§ionId=sidebar-right-1"
[5] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=PageList&widgetId=PageList1&action=editWidget§ionId=crosscol"
[6] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Text&widgetId=Text1&action=editWidget§ionId=sidebar-right-1"
[7] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Text&widgetId=Text2&action=editWidget§ionId=sidebar-right-1"
[8] "http://5d4a.wordpress.com/2010/08/02/smashing-the-stack-in-2010/"
[9] "http://advancedwindowsdebugging.com/ch06.pdf"
[10] "http://beej.us/guide/
我认为它会再迭代一次,因为函数的结果是:
> df44 <- mutate(df5, status = get_http_status(enlace))
[1] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Attribution&widgetId=Attribution1&action=editWidget§ionId=footer-3"
[2] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=BlogArchive&widgetId=BlogArchive1&action=editWidget§ionId=sidebar-right-1"
[3] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=BlogSearch&widgetId=BlogSearch1&action=editWidget§ionId=sidebar-right-1"
[4] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Followers&widgetId=Followers1&action=editWidget§ionId=sidebar-right-1"
[5] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=PageList&widgetId=PageList1&action=editWidget§ionId=crosscol"
[6] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Text&widgetId=Text1&action=editWidget§ionId=sidebar-right-1"
[7] "//www.blogger.com/rearrange?blogID=4514563088285989046&widgetType=Text&widgetId=Text2&action=editWidget§ionId=sidebar-right-1"
[8] "http://5d4a.wordpress.com/2010/08/02/smashing-the-stack-in-2010/"
[9] "http://advancedwindowsdebugging.com/ch06.pdf"
[10] "http://beej.us/guide/bgc/"
Error in parse_url(url) : length(url) == 1 is not TRUE
解决方案
由于您的函数包含一个未向量化的函数,因此请使用apply
高阶函数族来迭代您的向量。
下面,get_http_status
将在 的每个元素上调用df$enlace
。
对于每个调用,预期返回一个长度为一个字符向量character(1)
:
vapply(df5$enlace, get_http_status, character(1))
推荐阅读
- java - Can one StringBuilder be used for constructing multiple strings in Java?
- python - 使用 And 运算符为每个非无参数添加函数
- ruby-on-rails - Rails 服务器得到响应,但 localhost 页面随机挂起,直到系统重新启动
- font-awesome - 为什么我的终端 shell 上没有呈现或替换 Font Awesome 字符?
- typescript - 如何在嵌套 js 应用程序的服务文件中添加 DTO 源代码文件
- java - RSA Java:私钥不能用于加密
- java - 在 android studio 中同步出现问题:无法构建任何新项目
- windows-10 - ctags.exe & etags.exe 返回权限被拒绝
- java - 对图算法中的每条边都做浮点计算会不会非常低效
- java - UnMarshalException:意外元素