R:组合为列表时,NULL被删除

时间:2016-10-24 02:19:41

标签: r if-statement null

我正在尝试使用for loop从嵌套的数据框列表中获取六个元素,然后将这些元素放在一起,列表长度为六。然后rbind列入具有六列的数据框。 我发现每次元素为NULL时,它会在进入列表之前自动删除。

以下是代码的截断版本。对不起,数据本身有太多级别的列表,我不知道如何粘贴好的部分。

    ob_dat<-data.frame(a=character(0), b=character(0), c=character(0), d=character(0),e=character(0), f=character(0), stringsAsFactors=FALSE)
    e<-e_previous
    f<-f_previous
    for (k in 1:nrow(dat)){
    a<-dat$id[[k]]
    b<-dat$subject[[k]]
    c<-dat$updated[[k]]
    d<-dat$type[[k]]
    ob_list<-as.list(c(a,b,c,d,e,f))
    ob_list<-lapply(ob_list, function(x) ifelse(x == "NULL", NA, x))
ob_dat<rbind(ob_dat,setNames(ob_list,names(ob_dat)))        
    ob_dat[,1:6]<-apply(ob_dat[,1:6],2,as.character)   
  }

对于所有没有NULL的记录,代码运行良好,直到一些元素,比如c和d为NULL。它给了我如下错误:

Error in setNames(ob_list, names(ob_dat)) : 

'names'属性[6]的长度必须与vector [4]

的长度相同

显然,在将其他元素加入列表ob_list之前,删除了c和d的NULL元素。我尝试使用类似的东西:

c<-ifelse(c=="NULL",NA,c). I was hoping that using `ifelse` can change all `NULL` to `NA`. However, c was changed into `logical(0)` when c was NULL. 

请帮忙。谢谢。

0 个答案:

没有答案