Several SQL languages (I mostly use postgreSQL) have a function called coalesce which returns the first non null column element for each row. This can b
Another apply method, with mapply
.
mapply(function(...) {temp <- c(...); temp[!is.na(temp)][1]}, a, b, c)
[1] 1 2 NA 4 6
This selects the first non-NA value if more than one exists. The last non-missing element could be selected using tail
.
Maybe a bit more speed could be squeezed out of this alternative using the bare bones .mapply
function, which looks a little different.
unlist(.mapply(function(...) {temp <- c(...); temp[!is.na(temp)][1]},
dots=list(a, b, c), MoreArgs=NULL))
[1] 1 2 NA 4 6
.mapply
differs in important ways from its non-dotted cousin.
Map
) and so must be wrapped in some function like unlist
or c
to return a vector.mapply
, the moreArgs argument does not have a default, so must explicitly be fed NULL.