如何为数据框每行URL添加status_code列及解决apply报错
解决方法
错误原因
你用apply处理df$url时出错,是因为apply要求输入必须是矩阵或数据框,但df$url是一维向量,没有二维维度,所以触发dim(X) must have a positive length错误。另外第二个尝试里的dat是拼写错误,应该是df。
正确实现代码
下面两种方法都能完成需求,还能处理无效URL(比如youtefe.com这种无前缀或不存在的域名),避免程序中断:
方法1:用基础R的sapply
library(httr) # 给df新增status_code列 df$status_code <- sapply(df$url, function(x) { # 捕获请求失败的情况,返回NA response <- tryCatch(httr::GET(x), error = function(e) NULL) if (!is.null(response)) { response$status_code } else { NA } })
方法2:用purrr包更简洁
library(httr) library(purrr) df$status_code <- map_dbl(df$url, ~{ response <- tryCatch(httr::GET(.x), error = function(e) NULL) # %||% 是purrr的函数,意思是左边为NULL时返回右边的值 response$status_code %||% NA_real_ })
结果验证
运行后你的数据框会新增status_code列,示例中的四个URL会返回类似:200、404、200、NA(因为youtefe.com无法正常请求)。
内容的提问来源于stack exchange,提问作者Omar Gonzales
相关产品推荐
相关产品推荐

