#' Rename Data Nested within a List
#'
#' Loops through the elements of a list and adds a name_id column to data.frames
#' corresponding to the provided names.
#'
#' @param my_list a list; list elements may or may not have names
#' @param names character vector; the names of the elements of the list, if the list is unnamed
#'
#' @return a list
#'
#' @export
#'
#' @examples
#' \dontrun{
#' # example 1
#' paths <- list.files(directory)
#' files <- lapply(paths, fread)
#' rename_list(list = files, names = paths)
#' }
#'
#' # example 2
#' l <- purrr::rerun(5, x = list(a = head(mtcars), b = head(iris), c = list(o = 1, p = list(q = head(airquality), u = 1:10))), y = head(mtcars))
#' rename_list(l, names = paste0("id", 1:5))
#'
#' names(l) <- paste0("id", 1:5)
#' rename_list(l)
rename_list <- function(my_list, names = NULL){
"Loops through the elements of a list and add a name_id column to data.frames corresponding to provided names"
assertthat::assert_that(!missing(my_list), msg = "Input my_list is missing")
assertthat::assert_that(is.list(my_list) & !is.data.frame(my_list), msg = "Input my_list must be a list (not a data.frame)")
assertthat::assert_that(!(is.null(names) & is.null(names(my_list))), msg = "Input names is missing")
if(is.null(names)){
names <- names(my_list)
} else{
assertthat::assert_that(is.character(names), msg = "Invalid names argument")
}
check_names <- unique(Filter(function(x) x != "" & !is.na(x), names))
assertthat::assert_that(
length(names) == length(check_names),
length(my_list) == length(check_names),
msg = "Invalid names provided; names should be distinct identifiers corresponding to each element of my_list"
)
names(my_list) <- names
Map(function(l, n) aux_rename_list(l, n), my_list, names)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.