Passing variable in function to other function variables in R

丶灬走出姿态 提交于 2021-02-17 05:14:22

问题


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:


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))


来源:https://stackoverflow.com/questions/59435532/passing-variable-in-function-to-other-function-variables-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!