相关疑难解决方法(0)

如何组织大型闪亮应用程序?

组织更大的Shiny应用程序的最佳实践是什么?
我认为最好的R实践也适用于Shiny.
这里讨论最佳R实践:如何组织大型R程序
链接到谷歌的R风格指南:风格指南

但是,我可以采用什么样的Shiny上下文中的独特提示和技巧,使我的Shiny代码看起来更好(更具可读性)?我想的是:

  • 利用Shiny中的面向对象编程
  • 在server.R这部分应采购?
  • 包含markdown文档,图片,xml和源文件的项目的文件层次结构

例如,如果我正在使用,navbarPage并且tabsetPanel在tabPanel添加几个UI元素后,我的每个代码都开始变得非常混乱.

示例代码:

server <- function(input, output) {

 #Here functions and outputs..

}

ui <- shinyUI(navbarPage("My Application",
  tabPanel("Component 1",
             sidebarLayout(
                sidebarPanel(
                    # UI elements..
                ),
                mainPanel(
                    tabsetPanel(
                        tabPanel("Plot", plotOutput("plot")
                                 # More UI elements..
                                 ), 
                        tabPanel("Summary", verbatimTextOutput("summary")
                                 # And some more...
                                 ), 
                        tabPanel("Table", tableOutput("table")
                                 # And...
                                 )
                    )
                )
    )           
  ),
  tabPanel("Component 2"),
  tabPanel("Component 3")
))

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

为了组织ui.R …

r shiny

58
推荐指数
3
解决办法
1万
查看次数

闪亮的模块:将值从renderUI(在服务器功能中)传递到另一个模块的服务器功能

(我通读了这个问题,尽管标题相似,但它与我的问题无关—或者,如果是的话,我太傻了,看不出它如何适用。)

我正在对Shiny代码进行模块化,以便添加其他图形仅需要在单独的文件中添加几个功能。共有三个面板-侧面板(用户在其中选择图形),底部面板(用户在其中选择图形参数)和主面板(在其中显示图形)。

侧面板不变,但底部面板根据侧面板中的选择而改变。

side_panel.R

# UI function
sidePanelInput <- function(id, label='side panel') { # Some input w/ ns = selected_graph }

# Server function
sidePanel <- function(input, output, session) {
    selected_graph <- reactive({input$selected_graph})
    return(selected_graph)
Run Code Online (Sandbox Code Playgroud)

在我的app.R文件中,selected_graph同时传递到底部面板和主面板:

应用程序

# ...
sidePanel <- callModule(sidePanel, 'side')
bottomPanel <- callModule(bottomPanel, 'bottom', data=some_data, selected_graph=sidePanel)
mainPanel <- callModule(mainPanel, "main", data=some_data, selected_graph=sidePanel, params=bottomPanel)

# ...
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好(请注意,bottomPanel 还返回了一些内容,并将其传递给了mainPanel)。所有这些来回传递都很好。这是我的问题:每个图的底部面板都不同,并且在单独的文件中定义。这意味着bottomPanel模块需要知道从sidePanel吐出的反应堆中渲染什么。这也意味着我不使用UI函数bottomPanel,而只使用w /的服务器函数renderUI: …

r shiny

4
推荐指数
1
解决办法
457
查看次数

标签 统计

r ×2

shiny ×2