[R] get element of list with default?

Marc Schwartz marc_schwartz at me.com
Tue Apr 15 18:22:56 CEST 2014


On Apr 15, 2014, at 10:53 AM, Spencer Graves <spencer.graves at structuremonitoring.com> wrote:

> Hello:
> 
> 
>      Do you know of a simple function to return the value of a named element of a list if that exists, and return a default value otherwise?
> 
> 
>      It's an easy function to write (e.g., below).  I plan to add this to the "Ecfun" package unless I find it in another CRAN package.
> 
> 
>      Thanks,
>      Spencer
> 
> 
>    getElement <- function(element, default, list){
> #       get element of list;  return elDefault if absent
>        El <- list[[element]]
>        if(is.null(El)){
>            El <- default
>        }
>        El
>    }


Hi Spencer,

I don't know of a function elsewhere, but you can probably simplify the above with:

  getElement <- function(element, default, list) {
    ifelse(is.null(list[[element]]), default, list[[element]])
  }


MyList <- list(L1 = 1, L2 = 2) 

> MyList
$L1
[1] 1

$L2
[1] 2



> getElement("L1", 5, MyList) 
[1] 1

> getElement("L2", 5, MyList) 
[1] 2

> getElement("L3", 5, MyList) 
[1] 5


You might want to think about the ordering of the function arguments, given typical use, for ease of calling it. For example:

  getElement <- function(list, element, default = SomeValue)

Another consideration is that the above function will only get the element if it is a 'first level' element in the list. If it is in a sub-list of the main list, you would need to think about a recursive approach of some type, along the lines of what ?rapply does.

Regards,

Marc Schwartz




More information about the R-help mailing list