nico nico - 1 month ago 6
R Question

R: preventing unlist to drop NULL values

I'm running into a strange problem. I have a vector of lists and I use

unlist
on them. Some of the elements in the vectors are
NULL
and
unlist
seems to be dropping them. How can I prevent this?

Here's a simple (non) working example showing this unwanted feature of
unlist


a = c(list("p1"=2, "p2"=5),
list("p1"=3, "p2"=4),
list("p1"=NULL, "p2"=NULL),
list("p1"=4, "p2"=5))
unlist(a)
p1 p2 p1 p2 p1 p2
2 5 3 4 4 5

Answer

The issue here is that you can't have NULL in the middle of a vector. For example:

> c(1,NULL,3)
[1] 1 3

You can have NA in the middle though. You could could convert it to character and then back to numeric, which automatically converts the NULL values to NA (with a warning):

> b <- as.numeric(as.character(a))
Warning message:
NAs introduced by coercion 

then put the names back in, because they've been dropped by the previous operation:

> names(b) <- names(a)
> b
p1 p2 p1 p2 p1 p2 p1 p2 
2  5  3  4 NA NA  4  5 `