Shiny 根据输入列在仪表板侧栏中创建两个下拉列表

Shiny 根据输入列在仪表板侧栏中创建两个下拉列表,shiny,shinydashboard,Shiny,Shinydashboard,我想在侧边栏上做两个下拉列表,一个用于df.t数据框中RNAType列中的每个唯一字符串。一个下拉列表应命名为MicroRNA,另一个下拉列表应命名为snRNA,下拉列表中的选项应从miRNA列中选择。我提供了一个示例,当我只有一个组MicroRNA时,这是如何实现的,但是,我不知道如何根据列输入添加两个仪表板边栏 图书馆(生存) 图书馆(survminer) df.tI过滤MicroRNA和snRNA的RNAType列,并根据miRNA的唯一值创建下拉列表。然后,您可以使用这两个输入值创建两个

我想在侧边栏上做两个下拉列表,一个用于df.t数据框中
RNAType
列中的每个唯一字符串。一个下拉列表应命名为
MicroRNA
,另一个下拉列表应命名为
snRNA
,下拉列表中的选项应从
miRNA
列中选择。我提供了一个示例,当我只有一个组MicroRNA时,这是如何实现的,但是,我不知道如何根据列输入添加两个
仪表板边栏

图书馆(生存) 图书馆(survminer)


df.tI过滤MicroRNA和snRNA的RNAType列,并根据miRNA的唯一值创建下拉列表。然后,您可以使用这两个输入值创建两个带有过滤数据帧的单独绘图

您选择的反应式
数据在我看来没有任何用处

库(闪亮)
图书馆(shinydashboard)
图书馆(dplyr)
图书馆(生存)
图书馆(survminer)
df.t%特异性(miRNA)%>%拉动性(miRNA)
),
选择输入(
“snRNA”,“snRNA”,
choices=df.t%%>%过滤器(RNAType==“snRNA”)%%>%独立(miRNA)%%>%提取(miRNA)
)
),
仪表板主体(
滑块输入(“obs”、“分位数”,
最小值=0,最大值=1,值=c(0.4,0.8)
),
选项卡面板(
选项卡面板(“绘图”,
plotOutput(“myplot1”,width=“400px”,height=“300px”),
绘图输出(“myplot2”,宽度=“400px”,高度=“300px”))
)
)
)

该服务器非常适合创建边栏。不,我想知道如何创建两个绘图,每个“selectInput”对应一个绘图。我已经附加了用于一个绘图的绘图功能。更新了我关于更新问题的帖子,包括绘图。您从哪个软件包获得
survfit
功能?尽管在本例中我没有提供TimeDiff和Status,但请添加运行带有
library()
?library(survival)的脚本所需的包。使用TimeDiff和Status和value更新输入我认为数据框中的格式不正确。
TimeDiff
应该是数字的,而
Status
应该是逻辑的吗?是的,这是正确的
   df.t <-  structure(list(miRNA = c("hsa-let-7f-3p", "hsa-let-7d-3p", "hsa-let-7c-3p", 
"hsa-let-7g-3p", "hsa-let-7g-3p", "hsa-let-7i-3p"), RNAType = c("MicroRNA", 
"MicroRNA", "MicroRNA", "snRNA", "snRNA", "snRNA"), Status = c("1", 
"0", "1", "1", "1", "1"), TimeDiff = c("213", "1313", "2442", 
"1313", "1212", "2213"), value = c("10.3", "4", "3", "2.4", "5.4", 
"4.3")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

ui.miRNA <- dashboardPage(
        # Application title
        dashboardHeader(title=h4(HTML("Plot"))),
        dashboardSidebar(
            selectInput("MicroRNA", "miRNA", choices = unique( df.t$miRNA))),
        dashboardBody(
            sliderInput("obs", "Quantiles",
                        min = 0, max = 1, value = c(0.4, 0.8)
            ),
            tabsetPanel(
                tabPanel("Plot", plotOutput("myplot", width = "400px", height = "300px"))
            )
        )
    )
server <- function(input, output, session) {
            data_selected <- reactive({
        req(input$MicroRNA)
        filter(df.t, miRNA %in% input$MicroRNA)
    })
            output$myplot <- renderPlot({
        lower_value <- input$obs[1]
        upper_value <- input$obs[2]
        fitSurv <-   survfit(Surv(TimeDiff, Status) ~ cut(value, quantile(value, probs = c(0, lower_value, upper_value)), include.lowest=TRUE),data = data_selected())
        
        new_env <- environment()
        new_env$value <- data_selected()$value
        new_env$TimeDiff <- data_selected()$TimeDiff
        new_env$Status <- data_selected()$Status
        new_env$lower_value <- lower_value
        new_env$upper_value <- upper_value
                    ggsurvplot(fitSurv, 
                   new_env)
                              
        
        
    }    )
}