R/create_popn_envir.R

Defines functions create_popn_envir

Documented in create_popn_envir

#'create environments contain a set of data frames filtered for each population
#'
#'@param data_names a character vector of the key data frames to be filtered
#'@param popn a data frame one-row per partipant  a subjid varaibel and a column for each population indicating if a participant belongs to the population. The names of the variables must match up to the values in meta_table$Population.
#'@param subjid_string the character naming the column used in each data frame from data_names and popn, to identify the subjid.
#'@param rm_from_frame a logical indicating if the data sets shoudl be removed from the frame environment
#'@param frame the frame in which the original list of data sets are found, and  in which the new environments will be contianed.
#' @param verbose logical to print information on changes to the global environment or external files. Defaults to options()$verbose.
#'
#'@details  Now to use the data frames defined above in data_names you have to either directly
#'call attach(safety), for example orr lookup with attach_pop(1.01) for a table number.
#'There are separate R environments made for each of the populations in population & population_title
#'be careful to use detach(safety) - this is automated with write_table() and write_ggplot()
#'
#'@export


  create_popn_envir <- function( data_names,
                              popn,
                              subjid_string="subjid",
                              rm_from_frame=TRUE,
                              frame=parent.frame(),
                              verbose=options()$verbose
  ){



   popn_names <- names(popn)[ names(popn)!=subjid_string ]

for(pop_name in popn_names){
  env_temp <- new.env(parent=frame)
  # work through the columns of population, and create environments for all
  for(df in data_names){
    data_temp <- eval(as.name(df), envir=frame)
    # important here to automate - depends on consistent use of subjid
    # some data frames might not have subjid ...
    popn_temp        <- popn[[subjid_string]][popn[[pop_name]]]
    # take a subset based on the logical variable in population
    data_temp <- data_temp[data_temp[[subjid_string]] %in% popn_temp, ]
    assign(df, data_temp, envir = env_temp)
  }
  # keep an environment of the different population-based version of the data sets
  assign(pop_name, env_temp, envir=frame)
  if(verbose){cat(pop_name, "environment created in", environmentName(frame),"\n")}
 #rm(env_temp, data_temp, population_temp)
}

# remove the original data frames from the search path - else you will get duplications


if(rm_from_frame){
  if(verbose){cat("data frames removed from",environmentName(frame),":", data_names,"\n" )}
  rm(list = data_names, envir=frame)
  }
#rm(data_names, row, df)

}
shug0131/cctu documentation built on Nov. 10, 2023, 12:03 p.m.