I want to iteratively process a master list of comparisons using group_walk() as an alternative method to import batches of .csv files. I have the code for iteratively importing batch csvs here:
#Import list of csv files from directory, formatted as: |rownm | neg | pos | |------|-----|-----| |neg |19 |18 | |pos |5 |141 | ``` library(tidyverse) # for cleaning and shaping data library(epiR) library(irrCAC) all_epi_files <- list.files("congtables", pattern = "*.csv", full.names = TRUE) #Make export directory check_create_dir <- function(the_dir) { if (!dir.exists(the_dir)) { dir.create(the_dir, recursive = TRUE) } #Creates a directory if it doesn't already exist } the_dir_ex <- "data_generated/epidata" #Name the new desired directory check_create_dir(the_dir_ex) #Make the directory if it doesn't already exist #Make function for the series of analyses epi_analysis <- function(a_csv, the_dir){ #Import data as inserted variables dat2 <- read_csv(a_csv)%>% remove_rownames %>% column_to_rownames(var="rownm") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(a_csv)), na = "999.99", row.names = FALSE) } #Execute functions lapply(all_epi_files, FUN = epi_analysis, the_dir = the_dir_ex) ``` But instead I would like to input a dataset that looks like this: |Test Assay | Var1 | Var2 |Freq| |-----------|------|------|----| |Assay1 |neg |neg |19 | |Assay1 |neg |pos |5 | |Assay1 |pos |neg |8 | |Assay1 |pos |pos |141 | |Assay2 |neg |neg |25 | |Assay2 |neg |pos |6 | |Assay2 |pos |neg |17 | |Assay2 |pos |pos |33 | |Assay3 |neg |neg |99 | |Assay3 |neg |pos |20 | |Assay3 |pos |neg |5 | |Assay3 |pos |pos |105 | I want to use the same function epi_analysis and export a csv for each Test Assay (in this example Assay1, Assay2, and Assay3). So far I have: ``` #Make export directory check_create_dir <- function(the_dir) { if (!dir.exists(the_dir)) { dir.create(the_dir, recursive = TRUE) } #Creates a directory if it doesn't already exist } the_dir_ex <- "data_generated/epidata" #Name the new desired directory check_create_dir(the_dir_ex) #Make the directory if it doesn't already exist #Make function for the series of analyses epi_analysis <- function(.x, the_dir){ #Clean data dat2 <- .x %>% select(c(Var1, Var2, Freq)) %>% pivot_wider(Var1, names_from = Var2, values_from = Freq) %>% remove_rownames %>% column_to_rownames( var = "Var1") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(.x$TestAssay)), na = "999.99", row.names = FALSE) } data <- read_csv("data_raw/EpiTest.csv") %>% group_by(TestAssay)%>% group_map(~ epi_analysis) ``` But the only output I see is: ``` [[1]] function(.x, the_dir){ #Clean data dat2 <- .x %>% select(c(Var1, Var2, Freq)) %>% pivot_wider(Var1, names_from = Var2, values_from = Freq) %>% remove_rownames %>% column_to_rownames( var = "Var1") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(.x$TestAssay)), na = "999.99", row.names = FALSE) } [[2]] function(.x, the_dir){ #Clean data dat2 <- .x %>% select(c(Var1, Var2, Freq)) %>% pivot_wider(Var1, names_from = Var2, values_from = Freq) %>% remove_rownames %>% column_to_rownames( var = "Var1") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(.x$TestAssay)), na = "999.99", row.names = FALSE) } [[3]] function(.x, the_dir){ #Clean data dat2 <- .x %>% select(c(Var1, Var2, Freq)) %>% pivot_wider(Var1, names_from = Var2, values_from = Freq) %>% remove_rownames %>% column_to_rownames( var = "Var1") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(.x$TestAssay)), na = "999.99", row.names = FALSE) } [[4]] function(.x, the_dir){ #Clean data dat2 <- .x %>% select(c(Var1, Var2, Freq)) %>% pivot_wider(Var1, names_from = Var2, values_from = Freq) %>% remove_rownames %>% column_to_rownames( var = "Var1") %>% as.matrix() #Run tests rval <- epi.tests(dat2, conf.level = 0.95) rkappa<-epi.kappa(dat2) gwet <- gwet.ac1.table(dat2) kappa2 <- kappa2.table(dat2) #Export results hd <- c('sensitivity', 'specificity', 'pfp', 'pfn', 'kappa', 'gwet', 'pabak') ests <- c(round(rval$elements$sensitivity$est, digits = 3), round(rval$elements$specificity$est, digits = 3), round(rval$element$pfp$est, digits = 3), round(rval$element$pfn$est, digits = 3), round(kappa2$coeff.val, digits = 3), round(gwet$coeff.val, digits = 3), round(rkappa$pabak$est, digits = 3)) cis <- c(paste(round(rval$elements$sensitivity$lower, digits = 3), round(rval$elements$sensitivity$upper, digits = 3), sep = ","), paste(round(rval$elements$specificity$lower, digits = 3), round(rval$elements$specificity$upper, digits = 3), sep = ","), paste(round(rval$element$pfp$lower, digits = 3), round(rval$element$pfp$upper, digits = 3), sep = ","), paste(round(rval$element$pfn$lower, digits = 3), round(rval$element$pfn$upper, digits = 3), sep = ","), kappa2$coeff.ci, gwet$coeff.ci, paste(round(rkappa$pabak$lower, digits = 3), round(rkappa$pabak$lower, digits = 3), sep = ",")) df <- data.frame(hd, ests, cis) write.csv(df, file = paste0(the_dir, "/", basename(.x$TestAssay)), na = "999.99", row.names = FALSE) } ``` and there are no csvs in my epidata folder. Any suggestions/corrections welcomed. I haven't used group_map() before, but I am keen to use it. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.