Extract a named element from an object with a default
Get element name
of object
.
If object
does not have an element
name
, return default
.
If the name
element of object
is NULL
the result depends on
warn.NULL
: If TRUE
, issue a
warning and return default
. Otherwise,
return NULL
getElement2(object, name=1, default=NA, warn.NULL=TRUE, envir=list(), returnName)
object |
object from which to extract component
|
name |
Name or index of the element to extract |
default |
default value if |
warn.NULL |
logical to decide how to treat cases where
|
envir |
Supplemental list beyond |
returnName |
logical:
Default = |
1. If is.numeric(name) In <-
(1 <= name <= length(object))
2. else In <- if(name %in% names(object))
3. El <- if(In) object[[name]] else default
4. warn.NULL
?
5. if(returnName) return(as.character(El))
else return(eval(El, envir=object))
an object of the form of object[[name]]
;
if object
does not have an element or
slot name
, return default
.
Spencer Graves with help from Marc Schwartz and Hadley Wickham
getElement
, which also can return
slots from S4 objects.
## ## 1. name in object, return ## e1 <- getElement2(list(ab=1), 'ab', 2) # 1 # check all.equal(e1, 1) ## ## 2. name not in object, return default ## eNA <- getElement2(list(), 'ab') # default default = NA # check all.equal(eNA, NA) e0 <- getElement2(list(), 'ab', 2) # name not in object all.equal(e0, 2) e2 <- getElement2(list(ab=1), 'a', 2) # partial matching not used all.equal(e2, 2) ## ## 3. name NULL in object, return default ## ed <- getElement2(list(a=NULL), 'a',2) # 2 with a warning all.equal(ed, 2) e. <- getElement2(list(a=NULL), 'a', 2, warn.NULL=FALSE) # NULL all.equal(e., NULL) eNULL <- getElement2(list(a=NULL), 'a', NULL) # NULL all.equal(eNULL, NULL) ## ## 4. Language: find, eval, return ## Qte <- quote(plot(1:4, y=x, col=c2)) if(require(pryr)){ Qt <- pryr::standardise_call(Qte) # add the name 'x' fn <- getElement2(Qt) eQuote <- getElement2(Qt, 'y') Col2 <- getElement2(Qt, 'col', envir=list(c2=2)) # check all.equal(fn, 'plot') all.equal(eQuote, 1:4) all.equal(Col2, 2) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.