getElement2 {Ecfun} | R Documentation |
Extract a named element from an object with a default
Description
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
Usage
getElement2(object, name=1, default=NA,
warn.NULL=TRUE, envir=list(), returnName)
Arguments
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 = |
Details
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))
Value
an object of the form of object[[name]]
;
if object
does not have an element or
slot name
, return default
.
Author(s)
Spencer Graves with help from Marc Schwartz and Hadley Wickham
See Also
getElement
, which also can return
slots from S4 objects.
Examples
##
## 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)
}