## ##' read jplace file ## ##' ## ##' ## ##' @title read.jplace ## ##' @param file jplace file ## ##' @return \code{jplace} instance ## ##' @importFrom jsonlite fromJSON ## ##' @export ## ##' @author ygc ## ##' @examples ## ##' jp <- system.file("extdata", "sample.jplace", package="ggtree") ## ##' read.jplace(jp) ## read.jplace <- function(file) { ## fields <- tree <- placements <- NULL ## version <- metadata <- NULL ## with(fromJSON(file), ## new("jplace", ## fields = fields, ## treetext = tree, ## phylo = jplace_treetext_to_phylo(tree), ## placements = placements, ## version = version, ## metadata = metadata, ## file = filename(file) ## ) ## ) ## } ## ##' @rdname scale_color-methods ## ##' @exportMethod scale_color ## setMethod("scale_color", signature(object="jplace"), ## function(object, by, ...) { ## scale_color_(object, by, ...) ## }) ## ##' get.treeinfo method ## ##' ## ##' ## ##' @docType methods ## ##' @name get.treeinfo ## ##' @rdname get.treeinfo-methods ## ##' @aliases get.treeinfo,jplace,ANY-method ## ##' @exportMethod get.treeinfo ## ##' @author Guangchuang Yu \url{http://ygc.name} ## ##' @usage get.treeinfo(object, layout, ladderize, right, ...) ## ##' @examples ## ##' jp <- system.file("extdata", "sample.jplace", package="ggtree") ## ##' jp <- read.jplace(jp) ## ##' get.treeinfo(jp) ## setMethod("get.treeinfo", signature(object = "jplace"), ## function(object, layout="phylogram", ## ladderize=TRUE, right=FALSE, ...) { ## get.treeinfo.jplace(object, layout, ## ladderize, right, ...) ## } ## ) ## ##' get.treetext method ## ##' ## ##' ## ##' @docType methods ## ##' @name get.treetext ## ##' @rdname get.treetext-methods ## ##' @aliases get.treetext,jplace,ANY-method ## ##' @exportMethod get.treetext ## ##' @author Guangchuang Yu \url{http://ygc.name} ## ##' @usage get.treetext(object, ...) ## ##' @examples ## ##' jp <- system.file("extdata", "sample.jplace", package="ggtree") ## ##' jp <- read.jplace(jp) ## ##' get.treetext(jp) ## setMethod("get.treetext", signature(object = "jplace"), ## function(object, ...) { ## get.treetext.jplace(object, ...) ## } ## ) ## ##' get.fields method ## ##' ## ##' ## ##' @docType methods ## ##' @name get.fields ## ##' @rdname get.fields-methods ## ##' @aliases get.fields,jplace,ANY-method ## ##' @exportMethod get.fields ## ##' @author Guangchuang Yu \url{http://ygc.name} ## ##' @usage get.fields(object, ...) ## ##' @examples ## ##' jp <- system.file("extdata", "sample.jplace", package="ggtree") ## ##' jp <- read.jplace(jp) ## ##' get.fields(jp) ## setMethod("get.fields", signature(object = "jplace"), ## function(object, ...) { ## get.fields.tree(object) ## } ## ) ## ##' get.placement method ## ##' ## ##' ## ##' @docType methods ## ##' @name get.placements ## ##' @rdname get.placements-methods ## ##' @aliases get.placements,jplace,ANY-method ## ##' @exportMethod get.placements ## ##' @author Guangchuang Yu \url{http://ygc.name} ## ##' @usage get.placements(object, by, ...) ## ##' @examples ## ##' jp <- system.file("extdata", "sample.jplace", package="ggtree") ## ##' jp <- read.jplace(jp) ## ##' get.placements(jp, by="all") ## setMethod("get.placements", signature(object = "jplace"), ## function(object, by="best", ...) { ## placements <- object@placements ## place <- placements[,1] ## ids <- NULL ## if (length(placements) == 2) { ## ids <- sapply(placements[,2], function(x) x[1]) ## names(place) <- ids ## } ## if (by == "best") { ## best hit ## place <- lapply(place, function(x) { ## if (is(x, "data.frame") || is(x, "matrix")) { ## if (nrow(x) == 1) { ## return(x) ## } ## ## http://astrostatistics.psu.edu/su07/R/html/base/html/all.equal.html ## ## due to precision, number are identical maynot be equal, so use all.equal which can test nearly equal number ## ## if not equals, the output is a descript string of the differences ## idx <- sapply(2:nrow(x), function(i) all.equal(x[1,2], x[i,2])) ## if (any(idx == TRUE)) { ## return(x[c(1, which(idx==TRUE)+1),]) ## } else { ## return(x[1,]) ## } ## } else { ## ## if only 1 row, it may stored as vector ## ## the edge number, for example 523 can be 523.0000 due to R stored number as real number ## ## be careful in mapping edge number. ## return(x) ## } ## }) ## } ## place.df <- do.call("rbind", place) ## row.names(place.df) <- NULL ## if (!is.null(ids)) { ## nn <- rep(ids, sapply(place, function(x) { ## nr <- nrow(x) ## if (is.null(nr)) ## return(1) ## return(nr) ## })) ## place.df <- data.frame(name=nn, place.df) ## colnames(place.df) <- c("name", object@fields) ## } else { ## colnames(place.df) <- object@fields ## } ## res <- as.data.frame(place.df, stringsAsFactor=FALSE) ## ## res[] <- lapply(res, as.character) ## ## for (i in 1:ncol(res)) { ## ## if (all(grepl("^[0-9\\.e]+$", res[,i]))) { ## ## res[,i] <- as.numeric(res[,i]) ## ## } ## ## } ## return(res) ## }) ## get.treetext.jplace <- function(object, ...) { ## object@treetext ## } ## get.fields.jplace <- function(object, ...) { ## object@fields ## } ## get.treeinfo.jplace <- function(object, layout, ## ladderize, right, ...) { ## extract.treeinfo.jplace(object, layout, ## ladderize, right, ...) ## } ## ##' generate jplace file ## ##' ## ##' ## ##' @title write.jplace ## ##' @param nwk tree in newick format ## ##' @param data annotation data ## ##' @param outfile jplace output file ## ##' @return jplace file ## ##' @export ## ##' @author ygc ## ##' @examples ## ##' tree <- system.file("extdata", "pa.nwk", package="ggtree") ## ##' data <- read.csv(system.file("extdata", "pa_subs.csv", package="ggtree"), ## ##' stringsAsFactor=FALSE) ## ##' outfile <- tempfile() ## ##' write.jplace(tree, data, outfile) ## write.jplace <- function(nwk, data, outfile) { ## out <- file(outfile, "w") ## data[] = lapply(data, as.character) ## remove factor ## writeLines("{", out) ## writeLines(paste0('\t"tree": "', readLines(nwk), '",'), out) ## writeLines('\t"placements": [', out) ## for (i in 1:nrow(data)) { ## writeLines(paste0('\t{"p":["', paste(data[i,], collapse = '", "'), '"]}'), out, sep="") ## if (i != nrow(data)) { ## writeLines(',', out) ## } ## } ## writeLines('],', out) ## writeLines('\t"metadata": {"info": "generated by ggtree package"},', ## out) ## writeLines('\t"version": 2,', out) ## writeLines(paste0('\t"fields": [', '"', ## paste(colnames(data), collapse='", "'), ## '"'), ## out) ## writeLines('\t]\n}', out) ## close(out) ## }