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.