如何跳过for循环中的NA值

如何跳过for循环中的NA值,r,for-loop,R,For Loop,我正在应用for循环从RePEc数据库生成多个API请求。不幸的是,数据是不可复制的,因为管理员给我的访问代码只对我的IP地址有效,但我希望有人能帮助我找出我在for循环中做错了什么(我不擅长编写for循环) 基本上,我有一列80000个单元格df$author\u reg\u 2,其中包含大量NA值。我想跳过NA值,只为包含实际值的单元格生成API请求 url <- "https://api.repec.org/call.cgi?code=USERCODE&getauthorre

我正在应用for循环从RePEc数据库生成多个API请求。不幸的是,数据是不可复制的,因为管理员给我的访问代码只对我的IP地址有效,但我希望有人能帮助我找出我在for循环中做错了什么(我不擅长编写for循环)

基本上,我有一列80000个单元格
df$author\u reg\u 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)
    })

url当我们在每个元素上循环并在
上传递逻辑时,如果
(长度为1,输出为1),则需要单个元素

url <- "https://api.repec.org/call.cgi?code=USERCODE&getauthorrecordraw="

affiliation_2 <-vector("list", length=length(df$author_reg_2))
for(i in seq_along(df$author_reg_2))
try({
    Sys.sleep(1)
    if(is.na(df$author_reg_2[i])) 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)
})

您能否更改函数中的
if(is.na(df$author\u reg\u 2[i]))affiliation\u 2[i]if
if
语句应该针对单个元素,而不是整个列
if(is.na(df$author\u reg\u 2[i])
!成功了!非常感谢@akrun一如既往地为我们提供帮助!另外,我想最好是初始化一个
列表
,即
附属关系\u 2再次感谢您的帮助。我真的很感激。只有一个问题。是否有任何方法可以在系统每次遇到NA值时创建空单元格?我问这个问题的原因是我想把这些值(从属关系_2)粘贴到相应作者、论文等旁边的一个大数据框中。我需要一种方法来保存这些值相对于它们在df中的位置。@Oliver在这种情况下,不是
next
你需要
affliation_2[[I]好的,这很有道理。谢谢。你知道在这种情况下我会怎么做吗?我真的很不擅长循环…@Oliver更新了帖子非常感谢!
for(i in seq_along(df$author_reg_2))
    try({
        Sys.sleep(1)
        if(is.na(df$author_reg_2[i])) {
            affiliation_2[[i]] <-  NA_character_
           }  else{
            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)
    })