2016-01-25 44 views
0

我正在構建一個Shiny應用程序,並希望反應性控制哪些列顯示在熱圖中。我希望首先顯示所有列,然後通過取消選擇checkboxGroupInput中的列來對其進行分組。爲反應熱圖選擇列

當我運行代碼時,熱圖不會出現。我通過查看df_select數據幀來嘗試故障排除,但它最初只有「mpg」列,它應該包含所有這些列表(mpg:carb)。包括View(df_select)會引發錯誤,所以會在下面註釋掉。

任何幫助將不勝感激。

app.R

library(ggplot2) 
library(d3heatmap) 
library(dplyr) 
library(shiny) 

## ui.R 
ui <- fluidPage(
    sidebarPanel(
    h5(strong("Dendrogram:")), 
    checkboxInput("cluster_row", "Cluster Rows", value=FALSE), 
    checkboxInput("cluster_col", "Cluster Columns", value=FALSE), 
    checkboxGroupInput("col_list", "Select col to include:", names(mtcars), selected=names(mtcars)), 
    h5(strong("Sort:")), 
    checkboxInput("check_sort", "Sort (Yes/No)", value=FALSE), 
    selectInput("sort", "Sort:", names(mtcars), selected="mpg") 
), 
    mainPanel(
    h4("Heatmap"), 
    d3heatmapOutput("heatmap", width = "100%", height="600px") 
) 
) 

## server.R 
server <- function(input, output) { 

    df_select <- reactive({ 
    all <- names(mtcars) 
    print(all) #debug 
    selection <- input$col_list 
    print(selection) #debug 
    if("All" %in% input$col_list || length(input$col_list) == 0){ 
     selection <- all 
    }else{ 
     selection <- input$col_list 
    } 
    df_select <- select_(mtcars, selection) 
    #View(df_select) #debug 
    }) 

    df_sort <- reactive({ 
    df_sort <- if(input$check_sort==FALSE) df_select() else arrange_(df_select(), input$sort) 
    }) 

    output$heatmap <- renderD3heatmap({ 
    d3heatmap(df_sort(), 
     colors = "Blues", 
     if (input$cluster_row) RowV = TRUE else FALSE, 
     if (input$cluster_col) ColV = TRUE else FALSE, 
     yaxis_font_size = "7px" 
    ) 
    }) 
} 

shinyApp(ui = ui, server = server) 

回答

1

這是一個標準的評價問題。使用select_(mtcars, .dots=selection)(行號38)。

+0

謝謝jenesaisquoi!這解決了這個問題。 – sean