4

我正在尝试构建一个接收数据文件名的 Shiny 接口,然后运行一个生成 4 个表(矩阵)的 .R 脚本,并在 Shiny 中一次输出它们。例如:

用户界面

shinyUI(pageWithSidebar(
    headerPanel("Calculate CDK fingerprints"),
    sidebarPanel(
        textInput("text_input_fingerprints", "Enter smiles file name:"),
        actionButton("runButton", "Run")
    ),
    mainPanel(
        tableOutput("cdk")
    )
   )
  )

服务器.R

shinyServer(function(input,output){

output$cdk <- renderTable({

    input$runButton

    if (input$runButton == 0) {return()}        
    else{
         source('calculate_cdk_fingerprints.R', local = TRUE)
         print(table1)
         print(table2)
         print(table3)
         print(table4)
        }
     })
})

不幸的是,Shiny 只打印最后一张表,即表 4。而且我不能真正拆分 .R 脚本,因为它还会将一些文件输出到本地文件夹。是的,我真的需要使用 actionButton()。

有什么建议么?提前致谢!

4

1 回答 1

3

您需要为每个单独的表输出。或者,您可以使用verbatimTextSummarywithrbind

mainPanel(
    tableOutput("cdk1"),
    tableOutput("cdk2"),
    tableOutput("cdk3")
)

用户界面

shinyUI(pageWithSidebar(
    headerPanel("Calculate CDK fingerprints"),
    sidebarPanel(
        textInput("text_input_fingerprints", "Enter smiles file name:"),
        actionButton("runButton", "Run")
    ),
    mainPanel(
        tableOutput("cdk1"),
        tableOutput("cdk2"),
        tableOutput("cdk3")
    )
   )
  )

服务器.r

shinyServer(function(input,output){

#----
## eg: 
# source('calculate_cdk_fingerprints.R', local = TRUE)
#-----
## Example: 
table1 <- matrix(1:20, nrow=4)
table2 <- matrix(101:120, nrow=4)
table3 <- matrix(201:220, nrow=4)


output$cdk1 <- renderTable({

    input$runButton

    if (input$runButton == 0) {return()}        
    else{
         table1
        }
     })

output$cdk2 <- renderTable({

    input$runButton

    if (input$runButton == 0) {return()}        
    else{
         table2
        }
     })

output$cdk3 <- renderTable({

    input$runButton

    if (input$runButton == 0) {return()}        
    else{
         table3
        }
     })
})
于 2013-09-26T19:50:45.937 回答