diff --git a/R/get_attributes.R b/R/get_attributes.R index 5e429e3..0344a5f 100644 --- a/R/get_attributes.R +++ b/R/get_attributes.R @@ -49,7 +49,7 @@ get_attributes <- function(x, eml = NULL) { } ## get attributes - attributes <- lapply(attributeList$attribute, function(x) { + getAttributes <- function(x) { ## get full attribute list atts <- unlist(x, recursive = TRUE, use.names = TRUE) @@ -95,7 +95,16 @@ get_attributes <- function(x, eml = NULL) { "", names(atts)) atts <- as.data.frame(t(atts), stringsAsFactors = FALSE) - }) + } + + # use lapply for multiple attributes, otherwise pass in singular non-null attribute + attributes <- NULL + if (is.list(attributeList$attribute[[1]])) { + attributes <- lapply(attributeList$attribute, getAttributes) + } else if (!is.null(attributeList$attribute)) { + attributes <- getAttributes(attributeList$attribute) + } + attributes <- dplyr::bind_rows(attributes) ## remove non_fields in attributes @@ -109,7 +118,7 @@ get_attributes <- function(x, eml = NULL) { attributes <- attributes[, !(names(attributes) %in% non_fields)] ## get factors - factors <- lapply(attributeList$attribute, function(x) { + getFactors <- function(x) { ## get factors factors <- eml_get(x, "enumeratedDomain") @@ -125,7 +134,15 @@ get_attributes <- function(x, eml = NULL) { } return(factors) - }) + } + + # use lapply for multiple attributes, otherwise pass in singular non-null attribute + factors <- NULL + if (is.list(attributeList$attribute[[1]])) { + factors <- lapply(attributeList$attribute, getFactors) + } else if (!is.null(attributeList$attribute)) { + factors <- getFactors(attributeList$attribute) + } factors <- dplyr::bind_rows(factors) @@ -142,4 +159,4 @@ get_attributes <- function(x, eml = NULL) { factors = factors ) return(out) -} \ No newline at end of file +}