R/read_CoreMS_data.R

Defines functions read_CoreMS_data

Documented in read_CoreMS_data

#' Read in CoreMS output
#'
#' Reads in CoreMS output file(s) in CSV format as a single `data.frame` with class `CoreMSrbind`
#'
#' @param list_of_files a vector of character strings specifying the data files
#'   (in .csv format) to be read in and concatenated
#' @param sample_names (optional) a character vector denoting preferred sample names
#'
#' @details \code{read_CoreMS_data} reads in selected CSV files, appends
#'   'filename' column, verifies identical column names, and combines all files
#'   into a single `data.frame`/`CoreMSrbind` object
#'
#' @return CoreMSrbind object
#' 
#' @author Natalie Winans
#' 
#' @export

read_CoreMS_data <- function(list_of_files, sample_names = NULL) {
  
  # Check that list_of_files is a character vector
  if(!is.character(list_of_files)) stop("list_of_files must be of the class 'chr'")
  
  # Check that sample_names is a character vector
  if(!is.null(sample_names)){
    if(!is.character(sample_names)) stop("sample_names must be of the class 'chr'")
  }
  
  # Check that length of sample_names is equal to number of files
  if(!is.null(sample_names)) {
    if(!(length(sample_names) == length(list_of_files))) stop("length of sample_names must be equal to length of list_of_files")
  }
  
  if(is.null(sample_names)){
  # Extract filename from path
    read_add_filename <- function(file_name) {
      suppressMessages(readr::read_csv(file_name, col_types = readr::cols())) %>%
        dplyr::mutate(Filename = tools::file_path_sans_ext(file_name))
    }
    file_list <- lapply(list_of_files, read_add_filename)
  } else {
    file_list <- list()
    for (i in 1:length(list_of_files)) {
      file_list[[i]] <- suppressMessages(readr::read_csv(list_of_files[i], col_types = readr::cols())) %>% 
        dplyr::mutate(Filename = sample_names[i])
    }
    
  }
  
  all_data <- dplyr::bind_rows(file_list)
  
  if ("X1" %in% names(all_data)) {
    all_data <- all_data %>% dplyr::select(-X1)
  } 
  if ("...1" %in% names(all_data)) {
    all_data <- all_data %>% dplyr::select(-`...1`)
  }
  
  class(all_data) <- append("CoreMSrbind", class(all_data))
  
  return(all_data)
}
EMSL-Computing/fticRanalysis documentation built on March 23, 2024, 8:36 p.m.