diff --git a/DESCRIPTION b/DESCRIPTION index 3d3e849..cf5bbff 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -34,7 +34,8 @@ Suggests: testthat, tidyr, vroom, - xml2 + xml2, + yaml VignetteBuilder: knitr ByteCompile: true License: Artistic-2.0 diff --git a/NAMESPACE b/NAMESPACE index 74f2085..4e2b861 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -105,6 +105,7 @@ export(read.phyloxml) export(read.r8s) export(read.raxml) export(read.tree) +export(read.treeqza) export(rename_taxa) export(rescale_tree) export(root) diff --git a/R/treeqza.R b/R/treeqza.R new file mode 100644 index 0000000..2404a76 --- /dev/null +++ b/R/treeqza.R @@ -0,0 +1,34 @@ +#' @title read.treeqza +#' @param treeqza the qiime2 output file contained tree file. +#' @param node.label parse node label as 'label' or 'support' value. +#' @param ... additional parameter, passed to 'read.tree'. +#' @return phylo tree object or treedata object when node.label was parsed 'support'. +#' @export +#' @examples +#' qzafile1 <- system.file("extdata/qiime2treeqza", "fasttree-tree.qza", package="treeio") +#' qzafile2 <- system.file("extdata/qiime2treeqza", "iqt-tree.qza", package="treeio") +#' qzafile3 <- system.file("extdata/qiime2treeqza", "raxml-cat-tree.qza", package="treeio") +#' tr1 <- read.treeqza(qzafile1) +#' tr1 +#' tr2 <- read.treeqza(qzafile2) +#' tr2 +#' tr3 <- read.treeqza(qzafile3) +#' tr3 +#' # parse node label as 'support' value. +#' qzafile4 <- system.file("extdata/qiime2treeqza", "raxml-cat-bootstrap-tree.qza", package="treeio") +#' tr4 <- read.treeqza(qzafile4, node.label="support") +#' tr4 +read.treeqza <- function(treeqza, node.label = "label", ...){ + tmpdir <- tempdir() + unzipfiles <- utils::unzip(treeqza, exdir=tmpdir) + metadafile <- unzipfiles[grep("metadata.yaml", unzipfiles)[1]] + metaflag <- yaml::read_yaml(metadafile) + formatflag <- metaflag$format + if (formatflag!="NewickDirectoryFormat"){ + stop("Please check whether treeqza file contained tree file!") + }else{ + datafile <- unzipfiles[grep("data/tree.nwk", unzipfiles)] + x <- read.newick(datafile, node.label=node.label, ...) + return (x) + } +} diff --git a/inst/extdata/qiime2treeqza/fasttree-tree.qza b/inst/extdata/qiime2treeqza/fasttree-tree.qza new file mode 100644 index 0000000..d849814 Binary files /dev/null and b/inst/extdata/qiime2treeqza/fasttree-tree.qza differ diff --git a/inst/extdata/qiime2treeqza/iqt-tree.qza b/inst/extdata/qiime2treeqza/iqt-tree.qza new file mode 100644 index 0000000..70d3191 Binary files /dev/null and b/inst/extdata/qiime2treeqza/iqt-tree.qza differ diff --git a/inst/extdata/qiime2treeqza/raxml-cat-bootstrap-tree.qza b/inst/extdata/qiime2treeqza/raxml-cat-bootstrap-tree.qza new file mode 100644 index 0000000..4ec52a5 Binary files /dev/null and b/inst/extdata/qiime2treeqza/raxml-cat-bootstrap-tree.qza differ diff --git a/inst/extdata/qiime2treeqza/raxml-cat-tree.qza b/inst/extdata/qiime2treeqza/raxml-cat-tree.qza new file mode 100644 index 0000000..75e2def Binary files /dev/null and b/inst/extdata/qiime2treeqza/raxml-cat-tree.qza differ diff --git a/man/read.treeqza.Rd b/man/read.treeqza.Rd new file mode 100644 index 0000000..be43a9d --- /dev/null +++ b/man/read.treeqza.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/treeqza.R +\name{read.treeqza} +\alias{read.treeqza} +\title{read.treeqza} +\usage{ +read.treeqza(treeqza, node.label = "label", ...) +} +\arguments{ +\item{treeqza}{the qiime2 output file contained tree file.} + +\item{node.label}{parse node label as 'label' or 'support' value.} + +\item{...}{additional parameter, passed to 'read.tree'.} +} +\value{ +phylo tree object or treedata object when node.label was parsed 'support'. +} +\description{ +read.treeqza +} +\examples{ +qzafile1 <- system.file("extdata/qiime2treeqza", "fasttree-tree.qza", package="treeio") +qzafile2 <- system.file("extdata/qiime2treeqza", "iqt-tree.qza", package="treeio") +qzafile3 <- system.file("extdata/qiime2treeqza", "raxml-cat-tree.qza", package="treeio") +tr1 <- read.treeqza(qzafile1) +tr1 +tr2 <- read.treeqza(qzafile2) +tr2 +tr3 <- read.treeqza(qzafile3) +tr3 +# parse node label as 'support' value. +qzafile4 <- system.file("extdata/qiime2treeqza", "raxml-cat-bootstrap-tree.qza", package="treeio") +tr4 <- read.treeqza(qzafile4, node.label="support") +tr4 +} diff --git a/tests/testthat/test-treeqza.R b/tests/testthat/test-treeqza.R new file mode 100644 index 0000000..04fa10d --- /dev/null +++ b/tests/testthat/test-treeqza.R @@ -0,0 +1,10 @@ +context("tree qza file (output of qiime2 phylogenetic inference) input") + +library(treeio) +qzafile <- system.file("extdata/qiime2treeqza", "fasttree-tree.qza", package="treeio") + +tr <- read.treeqza(qzafile) + +test_that("read.treeqza should work for tree qza file",{ + expect_true(is(tr, "phylo")) +})