-
-
Save jnpaulson/324ac1fa3eab1bc7f845 to your computer and use it in GitHub Desktop.
| import_biom2 <- function(x, | |
| treefilename=NULL, refseqfilename=NULL, refseqFunction=readDNAStringSet, refseqArgs=NULL, | |
| parseFunction=parse_taxonomy_default, parallel=FALSE, version=1.0, ...){ | |
| # initialize the argument-list for phyloseq. Start empty. | |
| argumentlist <- list() | |
| x = biom(x) | |
| b_data = biom_data(x) | |
| b_data_mat = as(b_data, "matrix") | |
| otutab = otu_table(b_data_mat, taxa_are_rows=TRUE) | |
| argumentlist <- c(argumentlist, list(otutab)) | |
| ######################################## | |
| # Taxonomy Table | |
| ######################################## | |
| # Need to check if taxonomy information is empty (minimal BIOM file) | |
| if( all( sapply(sapply(x$rows, function(i){i$metadata}), is.null) ) ){ | |
| taxtab <- NULL | |
| } else { | |
| # parse once each character vector, save as a list | |
| taxlist = lapply(x$rows, function(i){ | |
| parseFunction(i$metadata$taxonomy) | |
| }) | |
| names(taxlist) = sapply(x$rows, function(i){i$id}) | |
| taxtab = build_tax_table(taxlist) | |
| } | |
| argumentlist <- c(argumentlist, list(taxtab)) | |
| ######################################## | |
| # Sample Data ("columns" in QIIME/BIOM) | |
| ######################################## | |
| # If there is no metadata (all NULL), then set sam_data <- NULL | |
| if( is.null(sample_metadata(x)) ){ | |
| samdata <- NULL | |
| } else { | |
| samdata = sample_data(sample_metadata(x)) | |
| } | |
| argumentlist <- c(argumentlist, list(samdata)) | |
| ######################################## | |
| # Tree data | |
| ######################################## | |
| if( !is.null(treefilename) ){ | |
| if( inherits(treefilename, "phylo") ){ | |
| # If argument is already a tree, don't read, just assign. | |
| tree = treefilename | |
| } else { | |
| # NULL is silently returned if tree is not read properly. | |
| tree <- read_tree(treefilename, ...) | |
| } | |
| # Add to argument list or warn | |
| if( is.null(tree) ){ | |
| warning("treefilename failed import. It not included.") | |
| } else { | |
| argumentlist <- c(argumentlist, list(tree) ) | |
| } | |
| } | |
| ######################################## | |
| # Reference Sequence data | |
| ######################################## | |
| if( !is.null(refseqfilename) ){ | |
| if( inherits(refseqfilename, "XStringSet") ){ | |
| # If argument is already a XStringSet, don't read, just assign. | |
| refseq = refseqfilename | |
| } else { | |
| # call refseqFunction and read refseqfilename, either with or without additional args | |
| if( !is.null(refseqArgs) ){ | |
| refseq = do.call("refseqFunction", c(list(refseqfilename), refseqArgs)) | |
| } else { | |
| refseq = refseqFunction(refseqfilename) | |
| } | |
| } | |
| argumentlist <- c(argumentlist, list(refseq) ) | |
| } | |
| ######################################## | |
| # Put together into a phyloseq object | |
| ######################################## | |
| return( do.call("phyloseq", argumentlist) ) | |
| } |
I loaded the library(biom) where the biom_data function is, but I get this error:
biom <- import_biom2("otu_table.biom")
Error in otu_table(as(biom_data(x), "matrix"), taxa_are_rows = TRUE) :
error in evaluating the argument 'object' in selecting a method for function 'otu_table': Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘biom_data’ for signature ‘"character", "missing", "missing"’
@arcys Hey! biom_data comes from the biom package - http://cran.r-project.org/web/packages/biom/index.html and definitely needs to be installed.
Hey @carlyrae!
Sorry for the delay. I've modified the import_biom2 above and this should be working now, let me know if it doesn't work for you!
Ok, I solved my own issue. But putting comments here in case someone does this too!
Reproducible result:
data("GlobalPatterns")
MGS <- phyloseq_to_metagenomeSeq(GlobalPatterns)
MGS
p <- cumNormStatFast(MGS)
MGS <- cumNorm(MGS, p =p)
b <- MRexperiment2biom(MGS, norm = T)
write_biom(b, biom_file = "test.biom")
biom1 <- import_biom2("test.biom")
You have to read in the biom file first for import biom to work, needs an object not a file
biom2 <-read_biom("test.biom")
biom3 <- import_biom2(biom2)
Hi,
I've tried to source this function and import the biome file to phyloseq but it show the following error message:
So where can I get the function biom_data? Thx