'R: Importing file using rio and here packages in a nested function

I'm working on functions that can take the chracter string argument GSE_expt. I have written 4 separate functions which take the argument GSE_expt and produce the output that I am able to save as a variable in the R environment.

The code block below has 2 of those functions. I use paste0 function with the variable GSE_expt to create a file name that the here and rio packages can use to import the file.

# Extracting metadata from 2 different sources and combining them into a single file
extract_metadata <- function(GSE_expt){
  GSE_expt <- deparse(substitute(GSE_expt)) # make sure it is a character string
  metadata_1 <- rnaseq_metadata_allsamples %>%   # subset a larger metadata file
    as_tibble %>% 
    dplyr::filter(GSE == GSE_expt)
  # metadata from ENA imported using rio and here packages  
  metadata_2 <- import(here("metadata", "rnaseq", paste0(GSE_expt, ".txt"))) %>% 
    as_tibble %>% 
    select("run_accession","library_layout", "library_strategy","library_source","read_count", "base_count", "sample_alias", "fastq_md5")
  metadata <- full_join(metadata_1, metadata_2, by = c("Run"="run_accession"))
  return(metadata)
}

# Extracting coverage stats obtained from samtools
clean_extract_coverage <- function(GSE_expt){
  coverage <- read_tsv(file = here("results","rnaseq","2022-01-11", "coverage", paste0("coverage_stats_", deparse(substitute(GSE_expt)), "_percent.txt")), col_names = FALSE)
  coverage <- data.frame("Run" = coverage$X1[c(TRUE, FALSE)],
                         "stats" = coverage$X1[c(FALSE, TRUE)])
  coverage <- separate(coverage, stats, into = c("num_reads", "covered_bases", "coverage_percent"), convert =  TRUE)
  return(coverage)
}

The functions work fine on their own individually when I use GSE118008 as the variable for the argument GSE_expt.

I am trying to create a nested/combined function so that I can run GSE118008 on both (or more) functions at the same time and save the output as a list.

When I ran a nested/combined function,

extract_coverage_metadata <- function(GSE_expt){
  coverage <- clean_extract_coverage(GSE_expt)
  metadata <- extract_metadata(GSE_expt)
  return(metadata)
}

extract_coverage_metadata(GSE118008)

This is the error message I got.

Error: 'results/rnaseq/2022-01-11/coverage/coverage_stats_GSE_expt_percent.txt' does not exist.

Rather than creating a filename coverage_stats_GSE118008_percent.txt (which it does fine with the individual function), it is unable to do so in this combined function, and instead returns the filename coverage_stats_GSE_expt_percent.txt

Traceback
8. stop("'", path, "' does not exist", if (!is_absolute_path(path)) { paste0(" in current working directory ('", getwd(), "')") }, ".", call. = FALSE)
7. check_path(path)
6. (function (path, write = FALSE) { if (is.raw(path)) { return(rawConnection(path, "rb")) ...
5. vroom_(file, delim = delim %||% col_types$delim, col_names = col_names, col_types = col_types, id = id, skip = skip, col_select = col_select, name_repair = .name_repair, na = na, quote = quote, trim_ws = trim_ws, escape_double = escape_double, escape_backslash = escape_backslash, ...
4. vroom::vroom(file, delim = "\t", col_names = col_names, col_types = col_types, col_select = { { col_select ...
3. read_tsv(file = here("results", "rnaseq", "2022-01-11", "coverage", paste0("coverage_stats_", deparse(substitute(GSE_expt)), "_percent.txt")), col_names = FALSE) at rnaseq_functions.R#30
2. clean_extract_coverage(GSE_expt)
1. extract_coverage_metadata(GSE118008)

I would appreciate any recommendations on how to solve this.

Thanks in advance!

Husain



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source