数据表未使用闪亮演示文稿中的 SelectInput 进行更新

问题描述 投票:0回答:1

我希望有人能帮助我解决这个看似简单的问题。我正在尝试制作一个闪亮的演示文稿,演示闪亮的应用程序如何工作,而无需在浏览器中打开它。我的问题很简单,当我更改

selectInput()
下拉列表时,我无法更新输出数据表。

第 1 步是生成数据框列表,第 2 步是汇总数据(平均值、标准偏差等),第 3 步是获取要在

datatable
中显示的数据。下面的代码仅显示其中一种“药物”的输出。

我觉得我错过了一些简单的东西......非常感谢帮助!

可重现的示例在这里:

# YAML
---
title: "Mytitle"
author: "Me"
date: "05/10/2023"
output: 
  ioslides_presentation: 
  smaller: false
  
runtime: shiny
---
library(tidyverse)
library(DT)
library(shiny)

#Make some fake data
eg.drugs <- list(Bunnies = data.frame(SampleID = LETTERS[1:20],
                                      SampleType = c(rep("QC1", 5), rep("QC2", 5), rep("Patient", 10)),
                                      Cal1 = c(round(rnorm(5, 35, 5),2), round(rnorm(5, 75, 10),2), jitter(seq(from=1, to=100, by=10))),
                                      Cal2 = c(round(rnorm(5, 32, 4.5),2), round(rnorm(5, 80, 11)), jitter(seq(from=1, to=100, by=10)))),
                 Kittens = data.frame(SampleID = LETTERS[1:20],
                                      SampleType = c(rep("QC1", 5), rep("QC2", 5), rep("Patient", 10)),
                                      Cal1 = c(round(rnorm(5, 34, 5),2), round(rnorm(5, 70, 10),2), jitter(seq(from=1, to=100, by = 10))),
                                      Cal2 = c(round(rnorm(5, 38, 4.5),2), round(rnorm(5, 80, 11),2), jitter(seq(from=1, to=100, by = 10)))),
                 Unicorns = data.frame(SampleID = LETTERS[1:20],
                                      SampleType = c(rep("QC1", 5), rep("QC2", 5), rep("Patient", 10)),
                                      Cal1 = c(round(rnorm(5, 7.5, 1),2), round(rnorm(5, 55, 3),2), jitter(seq(from=1, to=100, by = 10))),
                                      Cal2 = c(round(rnorm(5, 9, 2),2), round(rnorm(5, 51, 4.5),2), jitter(seq(from=1, to=100, by = 10)))))

fluidPage(
          fluidRow(sidebarPanel(
            selectInput('drug', "Choose Drug:", choices = names(eg.drugs)), width = 12), 
            width = 6),
          fluidRow(mainPanel({
            DTOutput('table')
          }, width = 12), width = 6)
)
      output.dat <- reactive({
             sum.dat <- lapply(eg.drugs, function(x){
                                  x %>%
                                  gather(SpecID, Value, 3:4) %>%
                                  filter(SampleType != "Patient") %>%
                                  group_by(SampleType, SpecID) %>%
                                  summarise(Mean = round(mean(Value),2),
                                            SD = round(sd(Value),3)) %>%
                                  pivot_wider(id_cols = SampleType, names_from = SpecID, values_from = c("Mean", "SD"))
             
              })
             return(sum.dat)
      })

     renderDT({
        datatable(output.dat()[[input$drug]])
      }
     )

我已经使用 R 和 Shiny 一段时间了,但这是我第一次尝试 Shiny 演示。非常感谢帮助!

shiny dt
1个回答
0
投票

您必须将输出

renderDT
分配给用户界面中的输出“组件”。在您的
mainPanel
中是组件
DTOutput('table')

要在那里显示输出,您必须通过以下方式将其分配给此组件:

   output$table <-  renderDT({
            datatable(output.dat()[[input$drug]])
    }
© www.soinside.com 2019 - 2024. All rights reserved.