使用fromJSON函数捕获API数据报错:Argument 'txt'参数不符合要求
解决fromJSON报错:Argument 'txt' must be a JSON string, URL or file.
我一眼就看出问题所在啦——你单独测试时传的是完整的API URL,但传给lapply的namelisttest里应该只是纯名字(比如"Matt"),不是拼接好的请求地址对吧?
咱们来拆解下:
你写的函数mynamegenderfunction里直接把参数x传给fromJSON(),但fromJSON()需要的是能直接返回JSON的资源(完整URL、JSON字符串或者本地文件路径)。如果x只是个名字,它根本不知道这是什么,自然就抛出那个错误了:
Error: Argument 'txt' must be a JSON string, URL or file.
修复方案很简单,分两步走:
修改函数,自动拼接API URL
把名字和API基础地址拼接成完整的请求链接,还要注意处理名字前后的空格(避免URL里出现多余空格导致请求失败):mynamegenderfunction <- function(x){ # 先清理名字的前后空格,再拼接成合法API地址 clean_name <- trimws(x) api_url <- paste0("https://api.genderize.io/?name=", clean_name) print(api_url) # 可以打印出来验证地址是否正确 mydata <- as.data.frame(fromJSON(api_url)) }确保namelisttest是纯名字列表
比如你的列表应该是这样的:namelisttest <- c("Matt", "Emma", "Liam", "Olivia")
额外小提示:
如果你的名字里包含空格或者特殊字符(比如"Mary Ann"、"José"),记得用URLencode()处理一下,避免生成无效的URL:
api_url <- paste0("https://api.genderize.io/?name=", URLencode(trimws(x)))
最后再运行genderdata <- lapply(namelisttest, mynamegenderfunction),应该就能正常获取数据啦!
内容的提问来源于stack exchange,提问作者useR
相关产品推荐
相关产品推荐

