-
-
Save erictleung/eda33bceceebb190eb9a44c93a077d32 to your computer and use it in GitHub Desktop.
# --- | |
# title: Export QIIME2 OTU table to compatible file for phyloseq | |
# description: | | |
# Three main steps to get to compatible file to import to phyloseq | |
# | |
# Outline: | |
# 1. Export OTU table | |
# 2. Export taxonomy table | |
# 3. Export phylogenetic tree | |
# --- | |
# 1 Export OTU table | |
# - table-no-mitochondria-no-chloroplast.qza replace with your file | |
# - phyloseq => replace with where you'd like to output directory | |
qiime tools export \ | |
table-no-mitochondria-no-chloroplast.qza \ | |
--output-dir phyloseq | |
# OTU tables exports as feature-table.biom so convert to .tsv | |
# - Change -i and -o paths accordingly | |
biom convert \ | |
-i phyloseq/feature-table.biom \ | |
-o phyloseq/otu_table.txt \ | |
--to-tsv | |
# Manually change #OTUID to OTUID | |
# 2 Export taxonomy table | |
qiime tools export \ | |
taxonomy.qza \ | |
--output-dir phyloseq | |
# Manually change "feature ID" to "OTUID" | |
# 3 Export phylogenetic tree | |
qiime tools export \ | |
unrooted-tree.qza \ | |
--output-dir phyloseq | |
# 4 Merge files | |
# Filtered sequences will make taxonomy and OTU tables have different lengths |
# --- | |
# title: Manipulate QIIME2 output in R | |
# description: | | |
# Take in output from 1_qiime_part.sh and manipulate files in R | |
# --- | |
# Setup environment | |
library(here) | |
# Read in OTU table | |
in_path <- here("phyloseq", "otu_table.txt") | |
otu <- read.table(file = in_path, header = TRUE) | |
head(otu) | |
# Read in taxonomy table | |
tax <- read.table(Sile = "taxonomy.tsv", sep = '\t', header = TRUE) | |
head(tax) | |
# Merge files | |
merged_file <- merge(otu, tax, by.x = c("OTUID"), by.y = c("OTUID")) | |
head(merged_file) | |
# Note: the number of rows should equal your shortest file length, drops taxonomy | |
# for OTUs that don't exist in your OTU table | |
# Output merged .txt file | |
out_path <- here("phyloseq", "combined_otu_tax.tsv") | |
write.table(merged_file, file = out_path, sep = "\t", col.names = TRUE, row.names = FALSE) |
# Setup environment | |
library(phyloseq) | |
library(ggplot2) | |
library(ape) | |
# Read in OTU table | |
otu_table_in <- read.csv("otu_matrix.csv", sep = ",", row.names = 1) | |
otu_table_in <- as.matrix(otu_table_in) | |
# Read in taxonomy | |
# Separated by kingdom, phylum, class, order, family, genus, species | |
taxonomy <- read.csv("taxonomy.csv", sep = ",", row.names = 1) | |
taxonomy <- as.matrix(taxonomy) | |
# Read in metadata | |
metadata <- read.table("metadata.txt", row.names = 1) | |
# Read in tree | |
phy_tree <- read_tree("tree.nwk") | |
# Import all as phyloseq objects | |
OTU <- otu_table(otu_table_in, taxa_are_rows = TRUE) | |
TAX <- tax_table(taxonomy) | |
META <- sample_data(metadata) | |
# Sanity checks for consistent OTU names | |
taxa_names(TAX) | |
taxa_names(OTU) | |
taxa_names(phy_tree) | |
# Same sample names | |
sample_names(OTU) | |
sample_names(META) | |
# Finally merge! | |
ps <- phyloseq(OTU, TAX, META, phy_tree) | |
ps |
Hi, thank you so much for the script. I am getting errors when I try to import the files as a phyloseq object
For otu_table, I am getting:
Error in validObject(.Object) : invalid class “otu_table” object:
OTU abundance data must have non-zero dimensions.
For taxonomy table, I am getting:
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extent
Could you help me with this, please?
Thank you so much
Hi, thank you so much for the script. I am getting errors when I try to import the files as a phyloseq object
For otu_table, I am getting:
Error in validObject(.Object) : invalid class “otu_table” object:
OTU abundance data must have non-zero dimensions.For taxonomy table, I am getting:
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extentCould you help me with this, please?
Thank you so much
Hello, LinaMaMar!
Me too I see some errors. I have some solutions for example.
library(here)
in_path<- here("otu_table.txt")
otu <- read.table(file = in_path, header = TRUE)
head(otu)
tax<- read.table (file="taxonomy.tsv" ,sep='\t', header = TRUE)
head(tax)
merged_file<- merge(otu,tax,by.x= c("OTUID"), by.y= c("OTUID"))
head(merged_file)
out_path<-here("combined_otu_tax.tvs")
write.table(merged_file, file = out_path, sep = "\t", col.names = TRUE, row.names = FALSE)
I hope it helps you.
Regards.
Hello!
I am trying to import the files from qiime2 ("moving pictures tutorial") to the phyloseq, but, during the step ## Import all as phyloseq objects, I got the error messages below:
-
For: OTU <- otu_table(otu, taxa_are_rows = TRUE) --> I got this message: Error in validObject(.Object) : invalid class “otu_table” object: OTU abundance data must have non-zero dimensions.
-
For TAX <- tax_table(taxonomy) --> I got this message: Error in dimnames(x) <- dn : length of 'dimnames' [2] not equal to array extent
All the previous steps worked. But I am stucked now.
Could you help me please?
Thank you for your attention
Regards
Hi
awesome script, please assist in this I ran merged_file <- merge(otu, tax, by.x = c("OTUID"), by.y = c("OTUID")) and got the error
Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column, please help