2015-10-30 149 views
0

我想收集給定數據集的用戶輸入。我想插入一列,用戶可以確定他們是否想要擁有mtdata集合中的某輛車。這是完全主觀的,因爲意見因人而異,所以我無法編程。有沒有辦法追加一個額外的列,可以是一個複選框或下拉菜單,以識別用戶「想要擁有的汽車?將用戶輸入列添加到Shiny

library(shiny) 

shinyApp(ui = shinyUI(fluidPage(

      titlePanel("Interesting Cars"), 

      sidebarLayout(
       sidebarPanel(
       helpText("This is a side bar")), 

       mainPanel(
       tableOutput("view") 
       ) 
      ) 
      )), 
     server = function(input, output) { 

      output$view <- renderTable({ 
       head(mtcars[, 1:4], n = 6) 

      }) 

      }) 
+0

你剛剛在談論過濾數據到用戶想要什麼嗎? – cdeterman

+0

潛在?但是,每個項目都必須單獨選擇。我不是在尋找數據表功能,而是在尋找關於數據集的用戶意見。 – maloneypatr

+0

也許你可以提供更多的例子來展示你對mtcars數據集的含義。給我們一個例子,說明你定義'有趣'的意思。 – cdeterman

回答

0

這個怎麼樣,您可以使用DT庫。通過添加filter選項,用戶可以定義一個希望的不同組成部分,看看什麼車過來了。

library(shiny) 
library(DT) 

shinyApp(ui = shinyUI(fluidPage(

    titlePanel("Interesting Cars"), 

    sidebarLayout(
     sidebarPanel(
      helpText("This is a side bar")), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
)), 
server = function(input, output) { 

    output$view <- DT::renderDataTable({ 
     datatable(mtcars, 
        filter = "top" 
     ) 

    }) 

}) 

編輯

如果確實如此重要以添加另一列來指示它是否「有趣」,那麼如果您打算讓用戶在不同的條件下分配它,那麼將會有更多的代碼要寫入。這是一個只有mpg的例子。這裏的基本思想是將數據分配給reactiveValues函數。它可以隨意修改。這可以明顯改善更多(因爲它會繼續添加列),但它表明了這個概念。

shinyApp(ui = shinyUI(fluidPage(

    titlePanel("Interesting Cars"), 

    sidebarLayout(
     sidebarPanel(
      helpText("This is a side bar"), 
      uiOutput("mpg"), 
      actionButton("add_label", "Mark Interesting") 
      ), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
)), 
server = function(input, output) { 

    values <- reactiveValues(
     mydata = mtcars 
     ) 

    output$mpg <- renderUI({ 
     numericInput("mpg_input", "MPG Cutoff?", 
        value = 15 
        ) 
    }) 

    output$view <- DT::renderDataTable({ 
     datatable(values$mydata 
     ) 
    }) 

    observeEvent(input$add_label, { 
     validate(
      need(!is.null(input$mpg_input), "need mpg value") 
     ) 
     values$mydata <- data.frame(values$mydata, 
           Interesting_Flag = 
            ifelse(values$mydata$mpg > input$mpg_input, 
             "Interesting", 
             "Not Interesting")) 
    }) 
}) 
+0

這不是我正在尋找的。我正在尋找添加一個額外的列,用戶可以輸入一個是/否標誌。 – maloneypatr

+0

'DT'包具有行選擇功能(如果需要,可以與過濾器選項一起使用)。它與帶有複選框的額外列幾乎具有相同的效果。 – user5029763

+0

@ user5029763你是正確的,但OP似乎想給一個物理列添加特定的條件。我個人也只是使用過濾器,並點擊我想要的。 – cdeterman