quote not having effect with dplyr::mutate and purrr::map2

50 views Asked by At

trying to create function which takes in quoted variables names to mutate data frame before plotting but seem I'm not doing it right when I'm extending it with purrr::map2()

the probelm seem to be coming from the dplyr::mutate case_when() because the color_codes column with Log2FC_above2 and Log2FC_below2 tags are not correct in the resulting data frame when i use map2

here's example script

#####################################################
#### create example data frame ################# 
#####################################################

#function to generate random numbers
random_numb_generator = function(x, numb=25){
    treatment_x1 = runif(n=numb, min=-5, max=5)
    treatment_x2 = runif(n=numb, min=0, max=5)
    return(cbind(treatment_x1,treatment_x2))
}

n_unique_samples <- 5 
ls <- lapply(1:n_unique_samples, random_numb_generator, numb=25) #create a list of random numbers

# convert list to dataframe 
df <- do.call(data.frame, ls)


##rename columns of data frame
names_raw <- c(paste0("treatment_", letters[1:n_unique_samples],1:2),
paste0("treatment_", letters[1:n_unique_samples],c(2,1)))
names(df) <- sort(names_raw)

#add tag 
df <- df %>% mutate(gene.symbol = paste0("gene", row_number()))
######################################################################
#### make function to mutate table and prepare for plot ################# 
######################################################################
plot_exp <- function(dat_in, y_var, labels_col){
#enquo variables
    y_var <- enquo(y_var)
    y_var_name = quo_name(y_var)
  


  #mutate df to allow plotting
dat_log2 <- dat_in %>% mutate(labels = case_when({{labels_col}} >= abs(2) ~ as.character(gene.symbol),
                                                TRUE ~ ""),
                              color_codes = case_when(labels == "" ~ "Log2FC_below2",
                                                TRUE ~ "Log2FC_above2")) %>% 
                                                select(c({{y_var}}, {{labels_col}}, labels, color_codes, gene.symbol))

#head(dat_log2)
print(paste0("/path/to/save/",{{y_var_name}},".pdf"))
return(dat_log2)
}
######################################################################
#### unit test function and with purrr::map2 and ################# 
######################################################################

Here test function with two pairs of variables
#works fine
plot_exp(dat_in=df, y_var=treatment_a2, labels_col=treatment_a1)

#create separate vectors
col1 <- sort(names_raw)[str_detect(sort(names_raw),"1")]
col2 <- sort(names_raw)[str_detect(sort(names_raw),"2")]


##works but color_codes, `Log2FC_above2` and `Log2FC_below2` is wrong
map2(col1,col2, ~plot_exp(dat_in=df, y_var=.y, labels_col=.y))
0

There are 0 answers