Привет, сообщество RShiny -
Мне все еще тяжело, когда я думаю о том, как передавать реактивные значения между модулями. Ниже у меня есть три модуля вместе с сервером верхнего уровня и функциями пользовательского интерфейса. Три модуля будут делать это (теоретически) 1) модуль uploadTree позволит пользователю вводить и читать файл дерева phylogeneti c; 2) модуль paramsTree будет представлять собой несколько входов визуализации дерева, которые пользователь может выбрать, и он будет изменен в импортированном дереве из модуля uploadTree; 3) модуль displayTree будет модулем, который отображает дерево и регулирует визуализацию на основе пользовательского ввода (т. Е. Align = T или F).
Однако мне все еще трудно заставить это работать - в конечном счете, вероятно, потому, что мне все еще неясно, как заставить модули общаться друг с другом. В нынешнем виде этот код не позволяет отображать дерево и выдает ошибку «не удалось найти функцию« выравнивание »*
Предложения ...
Ниже приведен пример жестких кодов в совмещении = T:
library(shiny)
library(ggtree)
#top-level ui
ui <-
fluidPage(
h1("phylogeny"),
sidebarPanel(
mod_uploadTree_ui("uploadTree_ui_1")),
#mod_paramsTree_ui("paramsTree_ui_1")), #commented out as this is not working
mainPanel(mod_displayTree_ui("displayTree_ui_1"))
)
#top-level server
server <- function(input, output,session) {
treeDisplay <- callModule(mod_uploadTree_server, "uploadTree_ui_1")
#params <- callModule(mod_paramsTree_server, "paramsTree_ui_1") #commented out as this is not working.
callModule(mod_displayTree_server, "displayTree_ui_1", treeDisplay)
}
#uploadTree module - This module will use the read.newick function to read in a phylogenetic tree
mod_uploadTree_ui <- function(id){
ns <- NS(id)
tagList(
fileInput(ns("treefile"), label="Upload a newick file, please"))
}
mod_uploadTree_server <- function(input, output, session){
ns <- session$ns
treeFile <- reactive({
req(input$treefile)
treeio::read.newick(input$treefile$datapath)
})
}
#paramsTree module - This module *should* include multiple tree display parameters that can be selected by the user. Here, only one parameter is included for a smaller example. But I am unable to add this without an error occurring.
mod_paramsTree_ui <- function(id){
ns <- NS(id)
tagList(
checkboxInput(ns("alignTips"), "Align tip labels", TRUE)
)
}
mod_paramsTree_server <- function(input, output, session){
ns <- session$ns
observe({
align = reactive(input$alignTips)
})
}
#displayTree module - This module will plot the tree and will change the tree viz based on user inputs from param module
mod_displayTree_ui <- function(id, label = "Display Tree"){
ns <- NS(id)
tagList(
label,
plotOutput(ns("treeDisplay"))
)
}
mod_displayTree_server <- function(input, output, session, treeFile, align){
ns <- session$ns
make_tree <- reactive({
ggplot2::ggplot(treeFile()) + ggtree::geom_tree() + ggtree::geom_tiplab(align = T) #hardcoded align = T instead of based on user input
})
output$treeDisplay <- renderPlot({
make_tree()
})
}
shinyApp(ui, server)
в соответствии с предложением bretauv, вот код для чтения филогении и построения филогении с выровненными кончиками.
library(ggplot2)
library(treeio)
library(ggtree)
tree <- treeio::read.newick("1509MLJF6-1.dnd")
make_tree <- ggplot2::ggplot(tree) + ggtree::geom_tree() + ggtree::geom_tiplab(align = T)
make_tree
При необходимости дерево филогенет c располагается здесь