【发布时间】:2018-01-31 10:20:57
【问题描述】:
基本上我要做的是我的用户将选择一个基因,并且取决于基因将取决于情节的数量,范围从 1 到 10 个情节。
我希望能够根据要绘制的绘图数量来解决 UI 绘图宽度这可能吗?
希望下面的代码能帮助说明我的问题,循环遍历“基因”A、B、C 和 D
library(shiny)
library(shinydashboard)
dat = data.frame(gene =c(rep("A",3), rep("B",6), rep("C",1), rep("D",10)), sample1 = runif(10, 0,50), sample2 = runif(10, 0,50),
sample3 = runif(10, 0,50),sample4 = runif(10, 0,50),sample5 = runif(10, 0,50),sample6 = runif(10, 0,50))
ui <- dashboardPage(
dashboardHeader(title = "Title", titleWidth = "300px"),
dashboardSidebar(
textInput(inputId = "GoI", label = "Select gene of interest(A,B)", value ="A")),
dashboardBody(
tabsetPanel(
tabPanel("Differential Variability",plotOutput("boxplot"))
)))
server <- function(input, output){
output$boxplot <- renderPlot({dataGoI = dat[dat$gene == input$GoI,]
i = nrow(dat[dat$gene == input$GoI,])
g = c(0,0,0,1,1,1)
if (i > 5){
if (i == 6){
zones = matrix(c(1:6), nrow=2, byrow =T)
}else if (i == 7){
zones = matrix(c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7), nrow=2, byrow =T)
} else if (i == 8){
zones = matrix(c(1:8), nrow=2, byrow =T)
} else if (i == 9){
zones = matrix(c(rep(1:5, each=4), rep(6:9,each=5)), nrow =2, byrow =T)
} else{
zones = matrix(c(1:10),nrow=2, byrow=T)
}
}
if( i <= 5){
par(mfrow = c(1, i))
for(j in 1:i){
boxplot(as.numeric(dataGoI[j,2:7])~g)
}
}else {
layout(zones)
for(j in 1:i){
boxplot(as.numeric(dataGoI[j,2:7])~g)
}
}})
}
shinyApp(ui = ui, server = server)
【问题讨论】: