I think the following is a trifle faster than the i%in%names(x) version, probably because it only does the name lookup once. (I also don't like to use return() - it is too much like goto.)
getElement3 <- function(x, i, default) { i <- match(i, names(x)) if (is.na(i)) { default } else { x[[i]] } } Like the others, it does not check the assumption that 'i' is a character vector of length 1. Bill Dunlap TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of Spencer Graves > Sent: Tuesday, April 15, 2014 1:05 PM > To: Hadley Wickham > Cc: R list > Subject: Re: [R] get element of list with default? > > Thanks to Marc Schwartz and Hadley Wickham: > > > Based on their comments, I think I'll add a combination of > Hadley's code and getElement{base} Ecfun in a form like > getElement2(object, name, default). > > > Best Wishes, > Spencer > > > On 4/15/2014 9:33 AM, Hadley Wickham wrote: > > You really want to use the names of the list since lists can contain > > null. I'd recommend something more like: > > > > getElement <- function(x, i, default) { > > if (i %in% names(x)) return(x[[i]]) > > default > > } > > > > Hadley > > > > On Tue, Apr 15, 2014 at 10:53 AM, Spencer Graves > > <spencer.gra...@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 > >> } > >> > >> ______________________________________________ > >> R-help@r-project.org mailing list > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > >> http://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > > > > > > > -- > Spencer Graves, PE, PhD > President and Chief Technology Officer > Structure Inspection and Monitoring, Inc. > 751 Emerson Ct. > San José, CA 95126 > ph: 408-655-4567 > web: www.structuremonitoring.com > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.