R 基于打印数量的有光泽打印区域
基本上,我想做的是,我的用户会选择一个基因,取决于基因,取决于绘图的数量,范围从1到10个绘图 我希望能够根据要打印的打印数量确定UI打印宽度,这是否可行 希望下面的代码将有助于说明我的问题,通过“基因”A、B、C和D循环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
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))
那正是我想要的。