R/createInitialDataDictionary.R

Defines functions createInitialDataDictionary

Documented in createInitialDataDictionary

#'@title createInitialDataDictionary
#'@description Creates a new dataDictionary.csv file based on the column names of `data1.csv`, 
#'            adds missing, REQUIRED, and FIXED variables with `data1UserName=="NA"`, and opens the new 
#'            dataDictionary.csv file for the user to edit. RSPARROW execution will be terminated once the 
#'            dataDictionary.csv file is created. \\cr \\cr
#'Executed By: executeRSPARROW.R \\cr
#'Executes Routines: \\itemize\{\\item getVarList.R
#'             \\item readData.R
#'             \\item unPackList.R\} \\cr
#'@param file.output.list list of control settings and relative paths used for input and 
#'                        output of external files.  Created by `generateInputList.R`
#'@param input_data_fileName name of users data1 file
#'@param create_initial_parameterControlFiles yes/no indicating if new parameter files should 
#'       be generated based on the dataDictionary.csv control file



createInitialDataDictionary<-function(file.output.list,input_data_fileName,
                                      create_initial_parameterControlFiles){
  
  
  unPackList(lists = list(file.output.list = file.output.list),
             parentObj = list(NA)) 
  
  if (file.exists(file.path(paste(dirname(path_results),.Platform$file.sep,"dataDictionary.csv",sep="")))==FALSE){
    #read data1 or indata
    data1<-readData(file.output.list,input_data_fileName)
    
    #create varnames file
    initialVarnames<-as.data.frame(matrix(rep(NA,length(data1)),ncol=4,nrow=length(data1)))
    names(initialVarnames)<-c("varType","sparrowNames","data1UserNames","varunits")
    initialVarnames$data1UserNames<-names(data1)
    
    #match any required or fixed varnames
    fixed<-as.character(getVarList()$fixNames)
    required<-as.character(getVarList()$reqNames)
    initialVarnames$sparrowNames = ifelse(tolower(initialVarnames$data1UserNames) %in% c(fixed,required),tolower(initialVarnames$data1UserNames),NA)
    initialVarnames$varType = ifelse(tolower(initialVarnames$data1UserNames) %in% fixed,"FIXED",
                                     ifelse(tolower(initialVarnames$data1UserNames) %in% required,"REQUIRED",NA))
    
    #get explanations for fixed and required variables
    initialVarnames<-merge(initialVarnames,getVarList()$explanation,by="sparrowNames",all.x=TRUE)
    
    #reorder
    initialVarnames<-initialVarnames[match(names(data1),initialVarnames$data1UserNames),match(c("varType","sparrowNames","data1UserNames","varunits","explanation"),names(initialVarnames))]
    
    missingRequired<-required[which(!required %in% initialVarnames$sparrowNames)]
    if (length(missingRequired)!=0){
      message("MISSING REQUIRED sparrowNames :")
      for (i in missingRequired){
        message(i)
      }
    }#if missing required
    cat("\n \n")
    missingFixed<-fixed[which(!fixed %in% initialVarnames$sparrowNames)]
    if (length(missingFixed)!=0){
      message("MISSING FIXED sparrowNames : ")
      for (i in missingFixed){
        message(i)
      }
    }#if missing fixed
    
    #add missing names to top of initialvarnames
    missing<-data.frame(sparrowNames = c(missingRequired,missingFixed))
    if (nrow(missing)!=0){
      missing<-merge(missing,getVarList()$explanation, by="sparrowNames")
      missing$varType<-ifelse(missing$sparrowNames %in% fixed,"FIXED","REQUIRED")
      missing$data1UserNames<-rep(NA,nrow(missing))
      missing$varunits<-missing$data1UserNames
      missing<-missing[,match(c("varType","sparrowNames","data1UserNames","varunits","explanation"),names(missing))]
      initialVarnames<-rbind(missing,initialVarnames)
    }
    
    #write varnames
    fwrite(file=paste(dirname(path_results),.Platform$file.sep,"dataDictionary.csv",sep=""),initialVarnames,
           row.names=FALSE, col.names=TRUE,showProgress = FALSE,dec=csv_decimalSeparator,sep=csv_columnSeparator,na = "NA")
    cat("\n \n")
    message(paste("INITIAL dataDictionary FILE : ",paste(dirname(path_results),.Platform$file.sep,"dataDictionary.csv",sep="")," AVAILABLE FOR EDIT",sep=""))
    shell.exec(paste(dirname(path_results),.Platform$file.sep,"dataDictionary.csv",sep=""))
    
    if (create_initial_parameterControlFiles=="no"){
      cat("\n \n")
      message("RUN EXECUTION TERMINATED")
    }
  }else{#varnames already exists
    message(paste(paste(dirname(path_results),.Platform$file.sep,run_id,"_dataDictionary.csv",sep="")," ALREADY EXISTS.\n
NEW dataDictionary FILE NOT CREATED.\n
SET create_initial_dataDictionary<-'no' to RUN RSPARROW WITH CURRENT dataDictionary.",sep=""))
    if (create_initial_parameterControlFiles=="no"){
      cat("\n \n")
      message("RUN EXECUTION TERMINATED")
    }
  }
  
}#end function
tbep-tech/tbepRSparrow documentation built on Oct. 9, 2020, 6:24 a.m.