diff --git a/server.R b/server.R index 79ee45184f941ac88130309499ea6e9bdb562a12..4e38f3d66aa4c0e95f44484f0f4bee4408c89cca 100644 --- a/server.R +++ b/server.R @@ -1044,7 +1044,7 @@ shinyServer }) output$treeUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(phy_tree(data16S(), errorIfNULL = FALSE), "")) box( title = "Setting : " , width = NULL, @@ -1078,8 +1078,52 @@ shinyServer "treeShape", label = "Shape : ", choices = c("..." = 0, sample_variables(data16S())) + ), + collapsedBox(verbatimTextOutput("treeScript"), title = "RCode") + ) + }) + + output$treeScript <- renderText({ + scriptArgs <- c( + glue( + "physeq = prune_taxa(names(sort(taxa_sums(data), decreasing = TRUE)[1:{input$treeTopOtu}]), data)" ) ) + if (input$treeSample) { + scriptArgs <- c(scriptArgs, "method = \"sampledodge\"") + } else { + scriptArgs <- c(scriptArgs, "method = \"treeonly\"") + } + if (!is.null(checkNull(input$treeCol))) { + scriptArgs <- c(scriptArgs, glue("color = \"{input$treeCol}\"")) + } + if (!is.null(checkNull(input$treeShape))) { + scriptArgs <- c(scriptArgs, glue("shape = \"{input$treeShape}\"")) + } + scriptArgs <- c(scriptArgs, "size = \"abundance\"") + if (!is.null(checkNull(input$treeRank))) { + scriptArgs <- + c(scriptArgs, glue("label.tips = \"{input$treeRank}\"")) + } + scriptArgs <- c(scriptArgs, + "sizebase = 5", + "ladderize = \"left\"", + "plot.margin = 0") + if (!is.null(checkNull(input$treeTitle))) { + scriptArgs <- c(scriptArgs, glue("title = \"{input$treeTitle}\"")) + } + script <- c( + scriptHead, + "# Plot phylogenetic tree", + glue("p <- plot_tree({glue_collapse(scriptArgs, sep=', ')})") + ) + if (input$treeRadial) { + script <- c(script, + "p <- p + coord_polar(theta = \"y\")") + } + script <- c(script, "", "plot(p)") + + return(glue_collapse(script, sep = "\n")) }) output$tree <- renderPlot({