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