For 循环 - 如果输出为 NULL,则缺少最后一步

For loop - missing last step if the output is NULL

我有这个示例数据

df<-data.frame(col=c(rep("YES",9),"NO"))
list<-list()
for(i in 1:10){
  if(df[i,1]=="YES"){
    list[[i]]<-"YES"
  }
  if(df[i,1]=="NO"){
    list[[i]]<-NULL
  }
}

问题是在这个循环之后

length(list)=9

我发现是因为最后的NULL。任何建议如何重写循环以显示最后的输出,即使它是 NULL?

这应该有效:

df<-data.frame(mycol=c(rep("YES",9),"NO"))

mylist<-list()
for(i in 1:10){
  if(df[i,1]=="YES") mylist[i] <- "YES"
  if(df[i,1]=="NO") mylist[i] <- list(NULL)
}

或者您可以使用 ifelse:

ifelse(df$mycol=="YES",list("YES"),ifelse(df$mycol=="NO",list(NULL),NA))

有个相关的post解释的很好:Assigning NULL to a list element in R?