【发布时间】:2020-02-19 18:53:34
【问题描述】:
我正在应用 for 循环从 RePEc 数据库生成多个 API 请求。不幸的是,数据不可重现,因为管理员给我的访问代码仅适用于我的 IP 地址,但我希望有人能帮助我找出我在 for 循环中做错了什么(我不擅长写作for 循环)。
基本上,我有一列包含 80,000 个单元格df$author_reg_2,其中包含大量 NA 值。我想跳过 NA 值,只为具有实际值的单元格生成 API 请求。
url <- "https://api.repec.org/call.cgi?code=USERCODE&getauthorrecordraw="
affiliation_2 <-vector(length=length(df$author_reg_2))
for(i in 1:length(df$author_reg_2))
try({
Sys.sleep(1)
if(is.na(df$author_reg_2)) next
affiliation_fun <- paste0(url,df$author_reg_2[i])
affiliation_run <- fromJSON(txt=affiliation_fun) %>% select("affiliation")
affiliation_2[i] <- paste(unlist(affiliation_run), collapse =" ")
print(i)
})
每次我尝试运行此脚本时,它仍然会生成错误,告诉我它正在运行 NA 值。
任何帮助表示赞赏!提前谢谢!
【问题讨论】:
-
可以改一下
if(is.na(df$author_reg_2[i])) affiliation_2[i] <- NA else {affilation_run <- ... -
在您的函数中,
if语句应该用于单个元素而不是整个列if(is.na(df$author_reg_2)[i]) -
太棒了!那行得通!非常感谢@akrun 一如既往的帮助!
-
另外,我想最好初始化一个
list,即affiliation_2 <-vector("list", length=length(df$author_reg_2)),并在赋值中将[i]更改为[[i]]