tax.trans <-
function(otu.tab, tax.tab, rare.otu.tab, rare.tax.tab, sub.com = TRUE, na.code = "NANANA") {
n <- ncol(otu.tab)
lib.size <- colSums(otu.tab)
rare.n <- ncol(rare.otu.tab)
tax.count.out <- list()
tax.rare.count.out <- list()
tax.prop.out <- list()
tax.imp.prop.out <- list()
tax.clr.out <- list()
tax.sub.clr.out <- list()
for (j in 1:6) {
tax <- as.vector(unique(tax.tab[,j+1]))
tax.count <- matrix(NA, n, length(tax))
for (i in 1:length(tax)) {
ind.tax <- which(tax.tab[,j+1] == tax[i])
tax.count[,i] <- colSums(otu.tab[ind.tax,])
}
rownames(tax.count) <- colnames(otu.tab)
colnames(tax.count) <- tax
tax.prop <- matrix(NA, n, length(tax))
for (i in 1:length(lib.size)) {
tax.prop[i,] <- tax.count[i,]/lib.size[i]
}
rownames(tax.prop) <- colnames(otu.tab)
colnames(tax.prop) <- tax
tax.imp.prop <- numeric()
try(tax.imp.prop <- zCompositions::cmultRepl(tax.count), silent = TRUE)
if(length(tax.imp.prop) == 0) {
tax.imp.prop <- matrix(NA, n, length(tax))
for (i in 1:length(lib.size)) {
tax.imp.prop[i,] <- (tax.count[i,]+0.1)/lib.size[i]
}
rownames(tax.imp.prop) <- colnames(otu.tab)
colnames(tax.imp.prop) <- tax
}
tax.clr <- compositions::clr(tax.imp.prop)
rare.tax <- as.vector(unique(rare.tax.tab[,j+1]))
tax.rare.count <- matrix(NA, rare.n, length(rare.tax))
for (i in 1:length(rare.tax)) {
ind.tax <- which(rare.tax.tab[,j+1] == rare.tax[i])
tax.rare.count[,i] <- colSums(rare.otu.tab[ind.tax,])
}
rownames(tax.rare.count) <- colnames(rare.otu.tab)
colnames(tax.rare.count) <- rare.tax
ind <- which(tax == na.code)
if (length(ind) != 0) {
tax.count.out[[j]] <- as.data.frame(tax.count[,-ind])
tax.rare.count.out[[j]] <- as.data.frame(tax.rare.count[,-ind])
tax.prop.out[[j]] <- as.data.frame(tax.prop[,-ind])
tax.imp.prop.out[[j]] <- tax.sub.imp.prop <- as.data.frame(tax.imp.prop[,-ind])
tax.clr.out[[j]] <- as.data.frame(tax.clr[,-ind])
tax.sub.clr.out[[j]] <- as.data.frame(compositions::clr(tax.sub.imp.prop))
}else{
tax.count.out[[j]] <- as.data.frame(tax.count)
tax.rare.count.out[[j]] <- as.data.frame(tax.rare.count)
tax.prop.out[[j]] <- as.data.frame(tax.prop)
tax.imp.prop.out[[j]] <- tax.sub.imp.prop <- as.data.frame(tax.imp.prop)
tax.clr.out[[j]] <- as.data.frame(tax.clr)
tax.sub.clr.out[[j]] <- as.data.frame(compositions::clr(tax.sub.imp.prop))
}
}
names(tax.count.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
names(tax.rare.count.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
names(tax.prop.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
names(tax.imp.prop.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
names(tax.clr.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
names(tax.sub.clr.out) <- c("Phylum", "Class", "Order", "Family", "Genus", "Species")
if (sub.com) {
return(list(count = tax.count.out, rare.count = tax.rare.count.out, imp.prop = tax.imp.prop.out, prop = tax.prop.out, clr = tax.sub.clr.out))
}
if (!sub.com) {
return(list(count = tax.count.out, rare.count = tax.rare.count.out, imp.prop = tax.imp.prop.out, prop = tax.prop.out, clr = tax.clr.out))
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.