R 基于打印数量的有光泽打印区域

R 基于打印数量的有光泽打印区域,r,shiny,R,Shiny,基本上,我想做的是,我的用户会选择一个基因,取决于基因,取决于绘图的数量,范围从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,5

基本上,我想做的是,我的用户会选择一个基因,取决于基因,取决于绘图的数量,范围从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)
库(闪亮)
图书馆(shinydashboard)
dat=数据帧(基因=c(代表(“A”,3),代表(“B”,6),代表(“c”,1),代表(“D”,10)),样本1=runif(10,0,50),样本2=runif(10,0,50),
样本3=runif(10,0,50),样本4=runif(10,0,50),样本5=runif(10,0,50),样本6=runif(10,0,50))

ui不确定您想要的具体布局,但我建议您使用renderUI服务器端和uiOutput ui端。基于代码的简单示例如下

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",uiOutput("boxplot_ui"))

    )))      

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)
    }
  }})

  output$boxplot_ui <- renderUI({plotOutput({"boxplot"},width = nrow(dat[dat$gene == input$GoI,])*100)})
}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinydashboard)
dat=数据帧(基因=c(代表(“A”,3),代表(“B”,6),代表(“c”,1),代表(“D”,10)),样本1=runif(10,0,50),样本2=runif(10,0,50),
样本3=runif(10,0,50),样本4=runif(10,0,50),样本5=runif(10,0,50),样本6=runif(10,0,50))

那正是我想要的。