R/compileDatabase.MPI.R

#' compileDatabase.MPI
#'
#' adds dataset to soilcarbon database
#'
#' @param dataset_directory directory where compeleted and QC passed soilcarbon datasets are stored
#' @param write_report T or F whether or not to write a log file of the compilation
#' @param write_out T or F whether or not to write the compiled database file as csv in dataset_directory
#' @export
#' @import devtools
#' @import stringi
#'

compileDatabase.MPI <- function(dataset_directory, write_report=F, write_out=F){


requireNamespace("stringi")

  if (write_report==T){
  outfile<-paste0(dataset_directory, "compilation_log.txt")
  reportfile<-file(outfile)
  sink(reportfile)
  sink(reportfile, type = c("message"))
  }


data_files<-list.files(dataset_directory, full.names = T)
data_files<-data_files[grep("xlsx", data_files)]


template_file<-system.file("extdata", "Master_template_v9_MPI_entry_name_test_all.xlsx", package = "soilcarbon")
template<-read.soilcarbon(file=template_file, format = "MPI",template=T)
template_flat<-Reduce(function(...) merge(..., all=T), template)

flat_template_columns<-colnames(template_flat)

working_database<-template_flat

cat("\nCompiling data files in", dataset_directory)
cat("\n", rep("-", 30),"\n\n")

for(d in 1:length(data_files)){
  cat("\n\nchecking", basename(data_files[d]),"...")
  out<-QAQC(file = data_files[d], writeQCreport = T)
  cat("\n ", out, "errors generated by QAQC")
  if (out>0) next

  soilcarbon_data<-read.soilcarbon(data_files[d], format="MPI")
  flat_data<-Reduce(function(...) merge(..., all=T), soilcarbon_data)
  flat_data[] <- lapply(flat_data, as.character)
  flat_data[, setdiff(flat_template_columns, colnames(flat_data))]<-NA
  setdiff(colnames(working_database), colnames(flat_data))
  setdiff(colnames(flat_data), colnames(working_database))

  working_database<-rbind(working_database, flat_data)
}

  working_database[]<-lapply(working_database, function(x) stri_trans_general(x, "latin-ascii"))
  working_database[]<-lapply(working_database, type.convert)
  soilcarbon_database<-working_database

  if (write_report==T){
    sink(type="message")
    sink()
    cat("\n Compilation report saved to", outfile,"\n")
  }

  return(soilcarbon_database)
}
powellcenter-soilcarbon/soilcarbon documentation built on May 25, 2019, 11:24 a.m.