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

时间:2015-02-25 08:37:23

标签: r for-loop

我有这个示例数据

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?

1 个答案:

答案 0 :(得分:1)

这应该有效:

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))

有相关帖子有一个很好的解释Assigning NULL to a list element in R?