Chapter 2 Convert inputdata into phyloseq object

r Biocpkg(“phyloseq”) (McMurdie and Holmes 2013) is the most popular Biocondcutor package used by the microbiome research field, and phyloseq-class objects are a great data-standard for microbiota data in R. Therefore, the core functions in XMAS take phyloseq-class object as input. In the phyloseq object, information on OTU abundances, taxonomy of OTUs, the phylogenetic tree and metadata is stored.

This tutorial will introduce you the basic steps to convert results from the in-house pipeline into phyloseq-class object. More importantly on how to look at your data and filter appropriately. We will use the inputs from /home/xuxiaomin/project/standardized_analytics_workflow_R_function/demo_data/.

Loading packages

library(XMAS2)
library(dplyr)
library(tibble)
library(phyloseq)

2.1 Metaphlan2/3

The result of the in-house Metaphlan2/3 pipeline.

2.1.1 Merging output of metaphlan

  • go to the directory of metaphlan created by in-house metaphlan pipeline
cd /share/projects/Engineering/pipeline_output/PipelineJob_141157_20220823/
  • extract the absolute path of output
ls /share/projects/Engineering/pipeline_output/PipelineJob_141157_20220823/*/humann2/*.tsv | grep -E "metaphlan" > metaphlan_BJ_RoundG_filepath.tsv
  • Saving the following python codes into merge_metaphlan.py
import argparse as ap
import os
import re
import pandas as pd
import numpy as np


parser = ap.ArgumentParser(description='combining results from metaphlan')
parser.add_argument('-f', '--file', type=str,
                    help='file contains metaphlan results', required=True)
parser.add_argument('-p', '--prefix', type=str,
                    help='prefix of output', required=True)
parser.add_argument('-t', '--taxa', type=str, default="species",
                    help='specific taxa level', required=False)
parser.add_argument('-k', '--kind', type=str, default="metaphlan2",
                    help='version of metaphlan', required=False)
parser.add_argument('-o', '--out', type=str, default="./",
                    help='output path', required=False)
args = parser.parse_args()


def Filename_to_filepath(filelist):

    file2path = {}
    with open(filelist, 'r') as f:
        files = f.readlines()
    for File in files:
        File = File.strip()
        if os.path.exists(File):
            # seqid is either numeric(18933) or character (CJR0607)
            FileName = str(re.match(r'\S+[humann2|humann3]\/'
                                    r'(\d+|\d+\_\d+|\d+\_\d+\_\d+|\w+\d+)'
                                    r'\_metaphlan_\S+_list.tsv',
                                    File)[1])
            file2path[FileName] = File
    return(file2path)


def Read_File(filenames, samplenames, taxalevels, filetype):

    if filetype == 'metaphlan2':
        # skip row with '#' and the 1st row
        dat = pd.read_table(filenames,
                            sep='\t',
                            skip_blank_lines=True,
                            comment='#',
                            skiprows=1,
                            header=None)
        dat1 = dat.iloc[:, 0:2]
    else:
        # skip row with '#'
        dat = pd.read_table(filenames,
                            sep='\t',
                            skip_blank_lines=True,
                            comment='#',
                            #skiprows=1,
                            header=None)
        dat1 = dat.iloc[:, [0, 2]]

    if taxalevels[0] == taxalevels[1]:
        df_temp = dat1[dat1.iloc[:, 0].str.contains(taxalevels[0])]
    else:
        # filtering the rows where taxa doesn't contains the specific taxa level
        df = dat1[dat1.iloc[:, 0].str.contains(taxalevels[0])]
        df_temp = df[df.iloc[:, 0].str.contains(taxalevels[1]) == False]
    # adding column name to the respective columns
    df_temp.columns = ['taxaid', samplenames]

    res = df_temp.copy()

    # sorting by taxaid
    res.sort_values('taxaid', inplace=True)

    # dropping ALL duplicate values
    res.drop_duplicates(
                        subset='taxaid',
                        keep=False,
                        inplace=True)

    return(res)


def Merge_Metaphlan(filedict, taxa, filetype):
    if taxa == "species":
        taxalevels = 's__|t__'
    elif taxa == "genus":
        taxalevels = 'g__|s__'
    elif taxa == "family":
        taxalevels = 'f__|g__'
    elif taxa == "order":
        taxalevels = 'o__|f__'
    elif taxa == "class":
        taxalevels = 'c__|o__'
    elif taxa == "phylum":
        taxalevels = 'p__|c__'

    taxa_levels = taxalevels.split('|')
    if len(taxa_levels) != 2:
        print("please check your taxa")
        exit()

    df = pd.DataFrame()
    for key in filedict:
        temp_df = Read_File(filedict[key], key, taxa_levels, filetype)
        if df.empty:
            df = temp_df
        else:
            df = pd.merge(df,
                          temp_df,
                          on="taxaid",
                          how='outer')
    res = df.replace(np.nan, 0)
    return(res)


def Make_dir(dirpath):
    if not os.path.exists(dirpath):
        os.mkdir(dirpath)


def main():
    file = args.file
    out = args.out
    taxa = args.taxa
    kind = args.kind
    prefix = args.prefix

    file2dic = Filename_to_filepath(file)
    df_res = Merge_Metaphlan(file2dic, taxa, kind)

    Make_dir(out)
    outfile_name = out + "/" + prefix + ".csv"
    df_res.to_csv(outfile_name, sep='\t', encoding='utf-8', index=False)

    print('Congratulations, Program Ended Without Problem')

main()
  • merging output: for example: species levels
python merge_metaphlan.py \
    -f metaphlan_BJ_RoundG_filepath.tsv \
    -p metaphlan2_BJ_RoundG_merge_species \
    -t species \
    -o ./profile/

Finally, you would obtain the file integrated all the output in this project folder /share/projects/Engineering/pipeline_output/PipelineJob_141157_20220823/, and then use it to do data analysis.

2.1.2 Importing results

  1. /home/xuxiaomin/project/standardized_analytics_workflow_R_function/demo_data/MGS/metaphlan2_merged.tsv

  2. /home/xuxiaomin/project/standardized_analytics_workflow_R_function/demo_data/MGS/metadata.txt

metaphlan2_res <- read.table(
    system.file(
        "extdata", "metaphlan2_merged.tsv",
        package = "XMAS2"
    ),
    header = TRUE, 
    stringsAsFactors = FALSE
)
metaphlan2_sam <- read.table(
    system.file(
        "extdata", "metaphlan2_metadata.tsv",
        package = "XMAS2"
    ),
    sep = "\t",
    header = TRUE,
    stringsAsFactors = FALSE
)

2.1.3 taxa table

metaphlan2_res_list <- import_metaphlan_taxa(data_metaphlan2 = metaphlan2_res, 
                                             taxa_level = "Species")
tax_tab <- metaphlan2_res_list$tax_tab
head(tax_tab)
##                                  Kingdom            Phylum             Class              Order              Family          Genus
## s__Actinomyces_graevenitzii  k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
## s__Actinomyces_johnsonii     k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
## s__Actinomyces_massiliensis  k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
## s__Actinomyces_odontolyticus k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
## s__Actinomyces_oris          k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
## s__Actinomyces_viscosus      k__Bacteria p__Actinobacteria c__Actinobacteria o__Actinomycetales f__Actinomycetaceae g__Actinomyces
##                                                   Species
## s__Actinomyces_graevenitzii   s__Actinomyces_graevenitzii
## s__Actinomyces_johnsonii         s__Actinomyces_johnsonii
## s__Actinomyces_massiliensis   s__Actinomyces_massiliensis
## s__Actinomyces_odontolyticus s__Actinomyces_odontolyticus
## s__Actinomyces_oris                   s__Actinomyces_oris
## s__Actinomyces_viscosus           s__Actinomyces_viscosus

2.1.4 otu table

metaphlan2_res_list <- import_metaphlan_taxa(data_metaphlan2 = metaphlan2_res, 
                                             taxa_level = "Species")
otu_tab <- metaphlan2_res_list$abu_tab
head(otu_tab)
##                                    s1 s2      s3 s4 s5 s6       s7      s8        s9 s10      s11   s12      s13     s14 s15 s16 s17     s18
## s__Actinomyces_graevenitzii  3.58e-05  0 0.0e+00  0  0  0 7.20e-06 0.0e+00 0.0000000   0 1.40e-05 0e+00 0.00e+00 0.0e+00   0   0   0 6.1e-06
## s__Actinomyces_johnsonii     0.00e+00  0 0.0e+00  0  0  0 0.00e+00 0.0e+00 0.0000000   0 0.00e+00 0e+00 1.15e-05 0.0e+00   0   0   0 0.0e+00
## s__Actinomyces_massiliensis  0.00e+00  0 0.0e+00  0  0  0 2.95e-05 0.0e+00 0.0000000   0 0.00e+00 0e+00 0.00e+00 0.0e+00   0   0   0 0.0e+00
## s__Actinomyces_odontolyticus 7.70e-05  0 1.7e-06  0  0  0 2.47e-05 5.8e-06 0.0001175   0 6.16e-05 0e+00 1.66e-05 3.9e-06   0   0   0 0.0e+00
## s__Actinomyces_oris          0.00e+00  0 0.0e+00  0  0  0 2.81e-05 0.0e+00 0.0000135   0 0.00e+00 0e+00 0.00e+00 0.0e+00   0   0   0 0.0e+00
## s__Actinomyces_viscosus      4.60e-06  0 0.0e+00  0  0  0 0.00e+00 0.0e+00 0.0000039   0 6.20e-06 7e-06 1.10e-06 0.0e+00   0   0   0 0.0e+00
##                                   s19 s20 s21      s22 refE
## s__Actinomyces_graevenitzii  1.60e-06   0   0 0.00e+00    0
## s__Actinomyces_johnsonii     0.00e+00   0   0 0.00e+00    0
## s__Actinomyces_massiliensis  0.00e+00   0   0 2.52e-05    0
## s__Actinomyces_odontolyticus 4.19e-05   0   0 0.00e+00    0
## s__Actinomyces_oris          0.00e+00   0   0 7.40e-06    0
## s__Actinomyces_viscosus      0.00e+00   0   0 7.28e-05    0

2.1.5 metadata table

sam_tab <- metaphlan2_sam %>% tibble::column_to_rownames("SampleID")
head(sam_tab)
##    Group phynotype
## s1    BB      0.00
## s2    AA      2.50
## s3    BB      0.00
## s4    AA      1.25
## s5    AA     30.00
## s6    AA     15.00

2.1.6 phyloseq object

metaphlan2_ps <- get_metaphlan_phyloseq(
                    otu_tab = otu_tab, 
                    sam_tab = sam_tab,
                    tax_tab = tax_tab)
metaphlan2_ps
## phyloseq-class experiment-level object
## otu_table()   OTU Table:         [ 322 taxa and 23 samples ]
## sample_data() Sample Data:       [ 23 samples by 2 sample variables ]
## tax_table()   Taxonomy Table:    [ 322 taxa by 7 taxonomic ranks ]

we obtain the phyloseq-class object and then use it to perform data analysis.

Here, the phyloseq object comprises five components (OTU Table, Sample Data, and Taxonomy Table).

2.2 Transform the abundance of taxa whose relative abundance under Limit Of Detection (LOD) into Zeros

metaphlan2_ps_LOD_species <- aggregate_LOD_taxa(ps = metaphlan2_ps, 
                                                taxa_level = "Species", 
                                                cutoff = 1e-04)
metaphlan2_ps_LOD_species
## phyloseq-class experiment-level object
## otu_table()   OTU Table:         [ 192 taxa and 23 samples ]
## sample_data() Sample Data:       [ 23 samples by 2 sample variables ]
## tax_table()   Taxonomy Table:    [ 192 taxa by 7 taxonomic ranks ]

2.3 Systematic Information

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.1.3 (2022-03-10)
##  os       macOS Monterey 12.2.1
##  system   x86_64, darwin17.0
##  ui       RStudio
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Asia/Shanghai
##  date     2023-10-27
##  rstudio  2023.09.0+463 Desert Sunflower (desktop)
##  pandoc   3.1.1 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
##  package              * version   date (UTC) lib source
##  abind                  1.4-5     2016-07-21 [2] CRAN (R 4.1.0)
##  ade4                   1.7-22    2023-02-06 [2] CRAN (R 4.1.2)
##  ALDEx2                 1.30.0    2022-11-01 [2] Bioconductor
##  annotate               1.72.0    2021-10-26 [2] Bioconductor
##  AnnotationDbi          1.60.2    2023-03-10 [2] Bioconductor
##  ape                  * 5.7-1     2023-03-13 [2] CRAN (R 4.1.2)
##  askpass                1.1       2019-01-13 [2] CRAN (R 4.1.0)
##  backports              1.4.1     2021-12-13 [2] CRAN (R 4.1.0)
##  base64enc              0.1-3     2015-07-28 [2] CRAN (R 4.1.0)
##  bayesm                 3.1-5     2022-12-02 [2] CRAN (R 4.1.2)
##  Biobase              * 2.54.0    2021-10-26 [2] Bioconductor
##  BiocGenerics         * 0.40.0    2021-10-26 [2] Bioconductor
##  BiocParallel           1.28.3    2021-12-09 [2] Bioconductor
##  biomformat             1.22.0    2021-10-26 [2] Bioconductor
##  Biostrings             2.62.0    2021-10-26 [2] Bioconductor
##  bit                    4.0.5     2022-11-15 [2] CRAN (R 4.1.2)
##  bit64                  4.0.5     2020-08-30 [2] CRAN (R 4.1.0)
##  bitops                 1.0-7     2021-04-24 [2] CRAN (R 4.1.0)
##  blob                   1.2.4     2023-03-17 [2] CRAN (R 4.1.2)
##  bookdown               0.34      2023-05-09 [2] CRAN (R 4.1.2)
##  broom                  1.0.5     2023-06-09 [2] CRAN (R 4.1.3)
##  bslib                  0.5.0     2023-06-09 [2] CRAN (R 4.1.3)
##  cachem                 1.0.8     2023-05-01 [2] CRAN (R 4.1.2)
##  callr                  3.7.3     2022-11-02 [2] CRAN (R 4.1.2)
##  car                    3.1-2     2023-03-30 [2] CRAN (R 4.1.2)
##  carData                3.0-5     2022-01-06 [2] CRAN (R 4.1.2)
##  caTools                1.18.2    2021-03-28 [2] CRAN (R 4.1.0)
##  cccd                   1.6       2022-04-08 [2] CRAN (R 4.1.2)
##  cellranger             1.1.0     2016-07-27 [2] CRAN (R 4.1.0)
##  checkmate              2.2.0     2023-04-27 [2] CRAN (R 4.1.2)
##  class                  7.3-22    2023-05-03 [2] CRAN (R 4.1.2)
##  classInt               0.4-9     2023-02-28 [2] CRAN (R 4.1.2)
##  cli                    3.6.1     2023-03-23 [2] CRAN (R 4.1.2)
##  cluster                2.1.4     2022-08-22 [2] CRAN (R 4.1.2)
##  coda                   0.19-4    2020-09-30 [2] CRAN (R 4.1.0)
##  codetools              0.2-19    2023-02-01 [2] CRAN (R 4.1.2)
##  coin                   1.4-2     2021-10-08 [2] CRAN (R 4.1.0)
##  colorspace             2.1-0     2023-01-23 [2] CRAN (R 4.1.2)
##  compositions           2.0-6     2023-04-13 [2] CRAN (R 4.1.2)
##  conflicted           * 1.2.0     2023-02-01 [2] CRAN (R 4.1.2)
##  corpcor                1.6.10    2021-09-16 [2] CRAN (R 4.1.0)
##  corrplot               0.92      2021-11-18 [2] CRAN (R 4.1.0)
##  cowplot                1.1.1     2020-12-30 [2] CRAN (R 4.1.0)
##  crayon                 1.5.2     2022-09-29 [2] CRAN (R 4.1.2)
##  crosstalk              1.2.0     2021-11-04 [2] CRAN (R 4.1.0)
##  data.table             1.14.8    2023-02-17 [2] CRAN (R 4.1.2)
##  DBI                    1.1.3     2022-06-18 [2] CRAN (R 4.1.2)
##  DelayedArray           0.20.0    2021-10-26 [2] Bioconductor
##  deldir                 1.0-9     2023-05-17 [2] CRAN (R 4.1.3)
##  DEoptimR               1.0-14    2023-06-09 [2] CRAN (R 4.1.3)
##  DESeq2                 1.34.0    2021-10-26 [2] Bioconductor
##  devtools             * 2.4.5     2022-10-11 [2] CRAN (R 4.1.2)
##  digest                 0.6.33    2023-07-07 [1] CRAN (R 4.1.3)
##  doParallel             1.0.17    2022-02-07 [2] CRAN (R 4.1.2)
##  doSNOW                 1.0.20    2022-02-04 [2] CRAN (R 4.1.2)
##  dplyr                * 1.1.2     2023-04-20 [2] CRAN (R 4.1.2)
##  DT                     0.28      2023-05-18 [2] CRAN (R 4.1.3)
##  dynamicTreeCut         1.63-1    2016-03-11 [2] CRAN (R 4.1.0)
##  e1071                  1.7-13    2023-02-01 [2] CRAN (R 4.1.2)
##  edgeR                  3.36.0    2021-10-26 [2] Bioconductor
##  ellipsis               0.3.2     2021-04-29 [2] CRAN (R 4.1.0)
##  emmeans                1.8.7     2023-06-23 [1] CRAN (R 4.1.3)
##  estimability           1.4.1     2022-08-05 [2] CRAN (R 4.1.2)
##  evaluate               0.21      2023-05-05 [2] CRAN (R 4.1.2)
##  FactoMineR             2.8       2023-03-27 [2] CRAN (R 4.1.2)
##  fansi                  1.0.4     2023-01-22 [2] CRAN (R 4.1.2)
##  farver                 2.1.1     2022-07-06 [2] CRAN (R 4.1.2)
##  fastcluster            1.2.3     2021-05-24 [2] CRAN (R 4.1.0)
##  fastmap                1.1.1     2023-02-24 [2] CRAN (R 4.1.2)
##  fdrtool                1.2.17    2021-11-13 [2] CRAN (R 4.1.0)
##  filematrix             1.3       2018-02-27 [2] CRAN (R 4.1.0)
##  flashClust             1.01-2    2012-08-21 [2] CRAN (R 4.1.0)
##  FNN                    1.1.3.2   2023-03-20 [2] CRAN (R 4.1.2)
##  foreach                1.5.2     2022-02-02 [2] CRAN (R 4.1.2)
##  foreign                0.8-84    2022-12-06 [2] CRAN (R 4.1.2)
##  forestplot             3.1.1     2022-12-06 [2] CRAN (R 4.1.2)
##  formatR                1.14      2023-01-17 [2] CRAN (R 4.1.2)
##  Formula                1.2-5     2023-02-24 [2] CRAN (R 4.1.2)
##  fs                     1.6.2     2023-04-25 [2] CRAN (R 4.1.2)
##  futile.logger        * 1.4.3     2016-07-10 [2] CRAN (R 4.1.0)
##  futile.options         1.0.1     2018-04-20 [2] CRAN (R 4.1.0)
##  genefilter             1.76.0    2021-10-26 [2] Bioconductor
##  geneplotter            1.72.0    2021-10-26 [2] Bioconductor
##  generics               0.1.3     2022-07-05 [2] CRAN (R 4.1.2)
##  GenomeInfoDb         * 1.30.1    2022-01-30 [2] Bioconductor
##  GenomeInfoDbData       1.2.7     2022-03-09 [2] Bioconductor
##  GenomicRanges        * 1.46.1    2021-11-18 [2] Bioconductor
##  ggiraph                0.8.7     2023-03-17 [2] CRAN (R 4.1.2)
##  ggiraphExtra           0.3.0     2020-10-06 [2] CRAN (R 4.1.2)
##  ggplot2              * 3.4.2     2023-04-03 [2] CRAN (R 4.1.2)
##  ggpubr               * 0.6.0     2023-02-10 [2] CRAN (R 4.1.2)
##  ggrepel                0.9.3     2023-02-03 [2] CRAN (R 4.1.2)
##  ggsci                  3.0.0     2023-03-08 [2] CRAN (R 4.1.2)
##  ggsignif               0.6.4     2022-10-13 [2] CRAN (R 4.1.2)
##  ggVennDiagram          1.2.2     2022-09-08 [2] CRAN (R 4.1.2)
##  glasso                 1.11      2019-10-01 [2] CRAN (R 4.1.0)
##  glmnet                 4.1-7     2023-03-23 [2] CRAN (R 4.1.2)
##  glue                 * 1.6.2     2022-02-24 [2] CRAN (R 4.1.2)
##  Gmisc                * 3.0.2     2023-03-13 [2] CRAN (R 4.1.2)
##  GO.db                  3.14.0    2022-04-11 [2] Bioconductor
##  gplots                 3.1.3     2022-04-25 [2] CRAN (R 4.1.2)
##  gridExtra              2.3       2017-09-09 [2] CRAN (R 4.1.0)
##  gtable                 0.3.3     2023-03-21 [2] CRAN (R 4.1.2)
##  gtools                 3.9.4     2022-11-27 [2] CRAN (R 4.1.2)
##  highr                  0.10      2022-12-22 [2] CRAN (R 4.1.2)
##  Hmisc                  5.1-0     2023-05-08 [2] CRAN (R 4.1.2)
##  hms                    1.1.3     2023-03-21 [2] CRAN (R 4.1.2)
##  htmlTable            * 2.4.1     2022-07-07 [2] CRAN (R 4.1.2)
##  htmltools              0.5.5     2023-03-23 [2] CRAN (R 4.1.2)
##  htmlwidgets            1.6.2     2023-03-17 [2] CRAN (R 4.1.2)
##  httpuv                 1.6.11    2023-05-11 [2] CRAN (R 4.1.3)
##  httr                   1.4.6     2023-05-08 [2] CRAN (R 4.1.2)
##  huge                   1.3.5     2021-06-30 [2] CRAN (R 4.1.0)
##  igraph                 1.5.0     2023-06-16 [1] CRAN (R 4.1.3)
##  impute                 1.68.0    2021-10-26 [2] Bioconductor
##  insight                0.19.3    2023-06-29 [2] CRAN (R 4.1.3)
##  IRanges              * 2.28.0    2021-10-26 [2] Bioconductor
##  irlba                  2.3.5.1   2022-10-03 [2] CRAN (R 4.1.2)
##  iterators              1.0.14    2022-02-05 [2] CRAN (R 4.1.2)
##  jpeg                   0.1-10    2022-11-29 [2] CRAN (R 4.1.2)
##  jquerylib              0.1.4     2021-04-26 [2] CRAN (R 4.1.0)
##  jsonlite               1.8.7     2023-06-29 [2] CRAN (R 4.1.3)
##  kableExtra             1.3.4     2021-02-20 [2] CRAN (R 4.1.2)
##  KEGGREST               1.34.0    2021-10-26 [2] Bioconductor
##  KernSmooth             2.23-22   2023-07-10 [2] CRAN (R 4.1.3)
##  knitr                  1.43      2023-05-25 [2] CRAN (R 4.1.3)
##  labeling               0.4.2     2020-10-20 [2] CRAN (R 4.1.0)
##  lambda.r               1.2.4     2019-09-18 [2] CRAN (R 4.1.0)
##  later                  1.3.1     2023-05-02 [2] CRAN (R 4.1.2)
##  lattice              * 0.21-8    2023-04-05 [2] CRAN (R 4.1.2)
##  lavaan                 0.6-15    2023-03-14 [2] CRAN (R 4.1.2)
##  leaps                  3.1       2020-01-16 [2] CRAN (R 4.1.0)
##  libcoin                1.0-9     2021-09-27 [2] CRAN (R 4.1.0)
##  lifecycle              1.0.3     2022-10-07 [2] CRAN (R 4.1.2)
##  limma                  3.50.3    2022-04-07 [2] Bioconductor
##  locfit                 1.5-9.8   2023-06-11 [2] CRAN (R 4.1.3)
##  LOCOM                  1.1       2022-08-05 [2] Github (yijuanhu/LOCOM@c181e0f)
##  lubridate              1.9.2     2023-02-10 [2] CRAN (R 4.1.2)
##  magrittr             * 2.0.3     2022-03-30 [2] CRAN (R 4.1.2)
##  MASS                   7.3-60    2023-05-04 [2] CRAN (R 4.1.2)
##  Matrix                 1.6-0     2023-07-08 [2] CRAN (R 4.1.3)
##  MatrixGenerics       * 1.6.0     2021-10-26 [2] Bioconductor
##  matrixStats          * 1.0.0     2023-06-02 [2] CRAN (R 4.1.3)
##  mbzinb                 0.2       2022-03-16 [2] local
##  memoise                2.0.1     2021-11-26 [2] CRAN (R 4.1.0)
##  metagenomeSeq          1.36.0    2021-10-26 [2] Bioconductor
##  mgcv                   1.8-42    2023-03-02 [2] CRAN (R 4.1.2)
##  microbiome             1.16.0    2021-10-26 [2] Bioconductor
##  mime                   0.12      2021-09-28 [2] CRAN (R 4.1.0)
##  miniUI                 0.1.1.1   2018-05-18 [2] CRAN (R 4.1.0)
##  mixedCCA               1.6.2     2022-09-09 [2] CRAN (R 4.1.2)
##  mnormt                 2.1.1     2022-09-26 [2] CRAN (R 4.1.2)
##  modeltools             0.2-23    2020-03-05 [2] CRAN (R 4.1.0)
##  multcomp               1.4-25    2023-06-20 [2] CRAN (R 4.1.3)
##  multcompView           0.1-9     2023-04-09 [2] CRAN (R 4.1.2)
##  multtest               2.50.0    2021-10-26 [2] Bioconductor
##  munsell                0.5.0     2018-06-12 [2] CRAN (R 4.1.0)
##  mvtnorm                1.2-2     2023-06-08 [2] CRAN (R 4.1.3)
##  mycor                  0.1.1     2018-04-10 [2] CRAN (R 4.1.0)
##  NADA                   1.6-1.1   2020-03-22 [2] CRAN (R 4.1.0)
##  NetCoMi              * 1.0.3     2022-07-14 [2] Github (stefpeschel/NetCoMi@d4d80d3)
##  nlme                 * 3.1-162   2023-01-31 [2] CRAN (R 4.1.2)
##  nnet                   7.3-19    2023-05-03 [2] CRAN (R 4.1.2)
##  openssl                2.0.6     2023-03-09 [2] CRAN (R 4.1.2)
##  pbapply                1.7-2     2023-06-27 [2] CRAN (R 4.1.3)
##  pbivnorm               0.6.0     2015-01-23 [2] CRAN (R 4.1.0)
##  pcaPP                  2.0-3     2022-10-24 [2] CRAN (R 4.1.2)
##  permute              * 0.9-7     2022-01-27 [2] CRAN (R 4.1.2)
##  pheatmap             * 1.0.12    2019-01-04 [2] CRAN (R 4.1.0)
##  phyloseq             * 1.38.0    2021-10-26 [2] Bioconductor
##  picante              * 1.8.2     2020-06-10 [2] CRAN (R 4.1.0)
##  pillar                 1.9.0     2023-03-22 [2] CRAN (R 4.1.2)
##  pkgbuild               1.4.2     2023-06-26 [2] CRAN (R 4.1.3)
##  pkgconfig              2.0.3     2019-09-22 [2] CRAN (R 4.1.0)
##  pkgload                1.3.2.1   2023-07-08 [2] CRAN (R 4.1.3)
##  plyr                   1.8.8     2022-11-11 [2] CRAN (R 4.1.2)
##  png                    0.1-8     2022-11-29 [2] CRAN (R 4.1.2)
##  ppcor                  1.1       2015-12-03 [2] CRAN (R 4.1.0)
##  preprocessCore         1.56.0    2021-10-26 [2] Bioconductor
##  prettyunits            1.1.1     2020-01-24 [2] CRAN (R 4.1.0)
##  processx               3.8.2     2023-06-30 [2] CRAN (R 4.1.3)
##  profvis                0.3.8     2023-05-02 [2] CRAN (R 4.1.2)
##  promises               1.2.0.1   2021-02-11 [2] CRAN (R 4.1.0)
##  protoclust             1.6.4     2022-04-01 [2] CRAN (R 4.1.2)
##  proxy                  0.4-27    2022-06-09 [2] CRAN (R 4.1.2)
##  ps                     1.7.5     2023-04-18 [2] CRAN (R 4.1.2)
##  pscl                   1.5.5.1   2023-05-10 [2] CRAN (R 4.1.2)
##  psych                  2.3.6     2023-06-21 [2] CRAN (R 4.1.3)
##  pulsar                 0.3.10    2023-01-26 [2] CRAN (R 4.1.2)
##  purrr                * 1.0.1     2023-01-10 [2] CRAN (R 4.1.2)
##  qgraph                 1.9.5     2023-05-16 [2] CRAN (R 4.1.3)
##  quadprog               1.5-8     2019-11-20 [2] CRAN (R 4.1.0)
##  qvalue                 2.26.0    2021-10-26 [2] Bioconductor
##  R6                     2.5.1     2021-08-19 [2] CRAN (R 4.1.0)
##  RAIDA                  1.0       2022-03-14 [2] local
##  rbibutils              2.2.13    2023-01-13 [2] CRAN (R 4.1.2)
##  RColorBrewer         * 1.1-3     2022-04-03 [2] CRAN (R 4.1.2)
##  Rcpp                 * 1.0.11    2023-07-06 [1] CRAN (R 4.1.3)
##  RcppZiggurat           0.1.6     2020-10-20 [2] CRAN (R 4.1.0)
##  RCurl                  1.98-1.12 2023-03-27 [2] CRAN (R 4.1.2)
##  Rdpack                 2.4       2022-07-20 [2] CRAN (R 4.1.2)
##  readr                * 2.1.4     2023-02-10 [2] CRAN (R 4.1.2)
##  readxl               * 1.4.3     2023-07-06 [2] CRAN (R 4.1.3)
##  remotes                2.4.2     2021-11-30 [2] CRAN (R 4.1.0)
##  reshape2               1.4.4     2020-04-09 [2] CRAN (R 4.1.0)
##  reticulate             1.30      2023-06-09 [2] CRAN (R 4.1.3)
##  Rfast                  2.0.8     2023-07-03 [2] CRAN (R 4.1.3)
##  rhdf5                  2.38.1    2022-03-10 [2] Bioconductor
##  rhdf5filters           1.6.0     2021-10-26 [2] Bioconductor
##  Rhdf5lib               1.16.0    2021-10-26 [2] Bioconductor
##  rlang                  1.1.1     2023-04-28 [1] CRAN (R 4.1.2)
##  rmarkdown              2.23      2023-07-01 [2] CRAN (R 4.1.3)
##  robustbase             0.99-0    2023-06-16 [2] CRAN (R 4.1.3)
##  rootSolve              1.8.2.3   2021-09-29 [2] CRAN (R 4.1.0)
##  rpart                  4.1.19    2022-10-21 [2] CRAN (R 4.1.2)
##  RSpectra               0.16-1    2022-04-24 [2] CRAN (R 4.1.2)
##  RSQLite                2.3.1     2023-04-03 [2] CRAN (R 4.1.2)
##  rstatix                0.7.2     2023-02-01 [2] CRAN (R 4.1.2)
##  rstudioapi             0.15.0    2023-07-07 [2] CRAN (R 4.1.3)
##  Rtsne                  0.16      2022-04-17 [2] CRAN (R 4.1.2)
##  RVenn                  1.1.0     2019-07-18 [2] CRAN (R 4.1.0)
##  rvest                  1.0.3     2022-08-19 [2] CRAN (R 4.1.2)
##  S4Vectors            * 0.32.4    2022-03-29 [2] Bioconductor
##  sandwich               3.0-2     2022-06-15 [2] CRAN (R 4.1.2)
##  sass                   0.4.6     2023-05-03 [2] CRAN (R 4.1.2)
##  scales                 1.2.1     2022-08-20 [2] CRAN (R 4.1.2)
##  scatterplot3d          0.3-44    2023-05-05 [2] CRAN (R 4.1.2)
##  sessioninfo            1.2.2     2021-12-06 [2] CRAN (R 4.1.0)
##  sf                     1.0-7     2022-03-07 [2] CRAN (R 4.1.2)
##  shape                  1.4.6     2021-05-19 [2] CRAN (R 4.1.0)
##  shiny                  1.7.4.1   2023-07-06 [2] CRAN (R 4.1.3)
##  sjlabelled             1.2.0     2022-04-10 [2] CRAN (R 4.1.2)
##  sjmisc                 2.8.9     2021-12-03 [2] CRAN (R 4.1.0)
##  snow                   0.4-4     2021-10-27 [2] CRAN (R 4.1.0)
##  SpiecEasi            * 1.1.2     2022-07-14 [2] Github (zdk123/SpiecEasi@c463727)
##  SPRING                 1.0.4     2022-08-03 [2] Github (GraceYoon/SPRING@3d641a4)
##  stringi                1.7.12    2023-01-11 [2] CRAN (R 4.1.2)
##  stringr                1.5.0     2022-12-02 [2] CRAN (R 4.1.2)
##  SummarizedExperiment * 1.24.0    2021-10-26 [2] Bioconductor
##  survival               3.5-5     2023-03-12 [2] CRAN (R 4.1.2)
##  svglite                2.1.1     2023-01-10 [2] CRAN (R 4.1.2)
##  systemfonts            1.0.4     2022-02-11 [2] CRAN (R 4.1.2)
##  tensorA                0.36.2    2020-11-19 [2] CRAN (R 4.1.0)
##  TH.data                1.1-2     2023-04-17 [2] CRAN (R 4.1.2)
##  tibble               * 3.2.1     2023-03-20 [2] CRAN (R 4.1.2)
##  tidyr                * 1.3.0     2023-01-24 [2] CRAN (R 4.1.2)
##  tidyselect             1.2.0     2022-10-10 [2] CRAN (R 4.1.2)
##  timechange             0.2.0     2023-01-11 [2] CRAN (R 4.1.2)
##  truncnorm              1.0-9     2023-03-20 [2] CRAN (R 4.1.2)
##  tzdb                   0.4.0     2023-05-12 [2] CRAN (R 4.1.3)
##  umap                   0.2.10.0  2023-02-01 [2] CRAN (R 4.1.2)
##  units                  0.8-2     2023-04-27 [2] CRAN (R 4.1.2)
##  urlchecker             1.0.1     2021-11-30 [2] CRAN (R 4.1.0)
##  usethis              * 2.2.2     2023-07-06 [2] CRAN (R 4.1.3)
##  utf8                   1.2.3     2023-01-31 [2] CRAN (R 4.1.2)
##  uuid                   1.1-0     2022-04-19 [2] CRAN (R 4.1.2)
##  vctrs                  0.6.3     2023-06-14 [1] CRAN (R 4.1.3)
##  vegan                * 2.6-4     2022-10-11 [2] CRAN (R 4.1.2)
##  VennDiagram          * 1.7.3     2022-04-12 [2] CRAN (R 4.1.2)
##  VGAM                   1.1-8     2023-03-09 [2] CRAN (R 4.1.2)
##  viridis              * 0.6.3     2023-05-03 [2] CRAN (R 4.1.2)
##  viridisLite          * 0.4.2     2023-05-02 [2] CRAN (R 4.1.2)
##  vroom                  1.6.3     2023-04-28 [2] CRAN (R 4.1.2)
##  webshot                0.5.5     2023-06-26 [2] CRAN (R 4.1.3)
##  WGCNA                  1.72-1    2023-01-18 [2] CRAN (R 4.1.2)
##  withr                  2.5.0     2022-03-03 [2] CRAN (R 4.1.2)
##  Wrench                 1.12.0    2021-10-26 [2] Bioconductor
##  xfun                   0.40      2023-08-09 [1] CRAN (R 4.1.3)
##  XMAS2                * 2.2.0     2023-10-27 [1] local
##  XML                    3.99-0.14 2023-03-19 [2] CRAN (R 4.1.2)
##  xml2                   1.3.5     2023-07-06 [2] CRAN (R 4.1.3)
##  xtable                 1.8-4     2019-04-21 [2] CRAN (R 4.1.0)
##  XVector                0.34.0    2021-10-26 [2] Bioconductor
##  yaml                   2.3.7     2023-01-23 [2] CRAN (R 4.1.2)
##  zCompositions          1.4.0-1   2022-03-26 [2] CRAN (R 4.1.2)
##  zlibbioc               1.40.0    2021-10-26 [2] Bioconductor
##  zoo                    1.8-12    2023-04-13 [2] CRAN (R 4.1.2)
## 
##  [1] /Users/zouhua/Library/R/x86_64/4.1/library
##  [2] /Library/Frameworks/R.framework/Versions/4.1/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

References

McMurdie, Paul J, and Susan Holmes. 2013. “Phyloseq: An r Package for Reproducible Interactive Analysis and Graphics of Microbiome Census Data.” PloS One 8 (4): e61217.