You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中使用GET()遍历data.table时报错length(url) == 1 is not TRUE的问题

解决方案

你遇到的报错本质是自定义returnMLA仅支持单个邮政编码输入,而data.table默认会将整列向量传入j表达式的函数中,你可以通过以下两种方法实现需求:

方法1:使用data.table按行分组逻辑

通过by = 1:nrow(people)强制每行单独执行函数逻辑,每次仅传入单个邮政编码调用接口:

# 外层嵌套两层list是为了将返回的JSON结构化数据完整存为list列
people[, MLA := list(list(returnMLA(b))), by = 1:nrow(people)]

方法2:将自定义函数向量化

用Vectorize()包装你的自定义函数,让它原生支持向量输入,自动遍历每个元素执行:

# 生成向量化版本函数,SIMPLIFY=FALSE避免自动简化破坏返回的结构化数据
returnMLA_vec <- Vectorize(returnMLA, SIMPLIFY = FALSE)
# 直接整列赋值即可
people[, MLA := returnMLA_vec(b)]

可选优化:增加异常捕获

避免个别无效邮政编码导致整段代码运行崩溃,可以给函数增加错误处理逻辑:

returnMLA <- function(postalCode){
  tryCatch({
    urlMLA <- paste0("https://represent.opennorth.ca/postcodes/", postalCode)
    res <- GET(urlMLA)
    data <- fromJSON(rawToChar(res$content))
    return(data)
  }, error = function(e) {
    return(list(request_error = as.character(e)))
  })
}

内容的提问来源于stack exchange,提问作者ke.li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:42:02