1

I am trying to pass a variable Phyla (which is also the name of a df column of interest) into other functions. However I get the error: Error: Columntax_levelis unknown. Which I understand. It would just be more convenient to state the column you want to use once in the function since this will also be repeated numerous times in the script. I Have tried using OTU_melt_grouped[,1] since this will always be the first column to use in the dcast function, but get the error: Error: Must use a vector in[, not an object of class matrix. Moreover, it does not solve my solution in the group_by function since I want to be able to specify Phyla, Class, Order etc...

I am sure there must be a simple solution, but I don't know where to start!

taxa_specific_columns_func <- function(data, tax_level = Phyla) {

  OTU_melt_grouped <- data %>% 
    group_by(tax_level, variable) %>% 
    summarise(value = sum(value))

  taxa_cols <- dcast(OTU_melt_grouped, variable ~ tax_level)
  rownames(taxa_cols) <- meta_data$site
  taxa_cols <- taxa_cols[-1]

  return(taxa_cols)
}


tax_test <- taxa_specific_columns_func(OTU_melt)
1
  • Can you add a reproducible example along with expected output ? Commented Dec 21, 2019 at 12:00

1 Answer 1

2

As we are passing an unquoted variable, we could make use of curly-curly ({{..}}) operator in group_by

library(dplyr)
library(tidyr)
library(tibble)
taxa_specific_columns_func <- function(data, tax_level = Phyla) {
 data %>% 
         group_by({{tax_level}}, variable) %>% 
         summarise(value = sum(value)) %>%
         pivot_wider(names_from = {{tax_level}}, values_from = value) %>%
         column_to_rownames("variable")

}

taxa_specific_columns_func(OTU_melt)
#         A          B         C          D          E
#a  0.01859254 0.42141238 -0.196961 -0.1859115 -0.2901680
#b -0.64700080         NA -0.161108         NA         NA
#c -0.03297331 0.05871052 -1.963341         NA  0.7608218

data

set.seed(48)
OTU_melt <- data.frame(Phyla = rep(LETTERS[1:5], each = 3), 
      variable = sample(letters[1:3], 15, replace = TRUE), value = rnorm(15))
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.