我正在开发一个Rshiny仪表板,该仪表板允许上载csv文件以进行热图可视化。该文件的第一列名称为COL1,其他列为允许用户选择的ID名称。服务器部分中的某些代码使用R table()来汇总文件中的两列,如下所示:table(COL1,选择的列)通过cols(4)到达nrow(30)。然后,此矩阵由热图函数使用。我可以看到热图输出并选择了不同的ID,但是并没有更改热图模式以反映每个选定ID的不同数据。每次选择不同的ID,我都会得到相同的热图。我猜,ID选择未按预期更新。对这个问题的任何解决方案将不胜感激。
代码:
ui <- fluidPage(
titlePanel("plot"),
sidebarLayout(
sidebarPanel("Sidebar panel",
# Input: Selector for choosing dataset ----
fileInput("file1", "Add File",
accept = c(
"text/csv",
"text/comma-separated-values,text/plain",
".csv")
),
tags$hr(),
checkboxInput("header", "Header", TRUE),
selectInput("IDs", "Add ID:", choices=c())
# actionButton('getHmap', 'get heatmap')
),
mainPanel("Plot",
#column(6,
plotOutput("themap"),
#tableOutput("table.output")
)
)
)
server = function(input, output, session) {
data1 <- reactive({
validate(need(input$file1,""))
inFile <- input$file1
if (is.null(inFile))
return(NULL)
tbl <- read.csv(inFile$datapath)
return(tbl)
})
plotdata <- reactive({
data2 <- data1()
updateSelectInput(session,"IDs",choices=colnames(data2[,-1]))
data3 <- table(data2$COL1,data2[,input$sampleIDs])
data3 <- as.data.frame.matrix(data3)
data3 <- data3[c(2,1,4,3)]
data4 <- data3
data4$COL2 <- rownames(data3)
data4 <- data4[, c(5,1:4)]
data5 <- data4[,-1]
data.df <- as.matrix(data5)
return(data.df)
})
output$themap = renderPlot({
pheatmap(plotdata())
})
}
shinyApp(ui, server)
尝试以这种方式更改您的sertver函数:
server = function(input, output, session) {
data1 <- reactive({
validate(need(input$file1,""))
inFile <- input$file1
if (is.null(inFile))
return(NULL)
tbl <- read.csv(inFile$datapath)
updateSelectInput(session,"IDs",choices=colnames(tbl[,-1]))
return(tbl)
})
plotdata <- reactive({
data2 <- data1()
data3 <- table(data2$COL1,data2[,input$sampleIDs])
data3 <- as.data.frame.matrix(data3)
data3 <- data3[c(2,1,4,3)]
data4 <- data3
data4$COL2 <- rownames(data3)
data4 <- data4[, c(5,1:4)]
data5 <- data4[,-1]
data.df <- as.matrix(data5)
return(data.df)
})
output$themap = renderPlot({
pheatmap(plotdata())
})
}