2014-05-02 39 views
3

我正在構建一個應用程序,用戶可以逐列輸入數據值。點擊添加按鈕後,輸入的值將按列添加到現有值。例如 如果COL1,2,3被輸入和ADD被點擊我們在顯示單擊R中的按鈕後,將輸入字段重置爲空Shiny

col1 
    2 
    3 

並且如果COL2,4,7被輸入並添加點擊我們有具有顯示

col1 col2 
    2 4 
    3 7 

我喜歡這樣,當單擊添加按鈕時,輸入字段被清除以允許輸入新列。請爲ui和服務器找到以下代碼。輸出表也不能正確顯示,任何幫助解決這個問題也將不勝感激。

ui.R 

shinyUI(pageWithSidebar(
headerPanel("My data table"), 
sidebarPanel(h5("Enter input"), 
      textInput("colname","Enter Column Name",NA), 
      numericInput("x","X",NA), 
      numericInput("y","Y",NA), 
      br(), 
      actionButton("Add","ADD")), 
mainPanel(verbatimTextOutput("out")) 
)) 

而且

server.R 

shinyServer(function(input,output){ 

myTable <- reactive({ 
if(input$Add > 0) 
    return(isolate({ 
    colnm <- input$colname 
    x <- input$x 
    y <- input$y 
    result <- data.frame(rbind(colnm,x,y)) 
    result 
    })) 
}) 

output$out <- renderTable({ 
myTable() 
}) 

}) 

回答

6

表需要用renderTable而不是verbatimTextOutput呈現。我想你想保留舊的輸入。一種方法是使用reactiveValues。編輯:我沒有看到你想重置輸入。要重置輸入,請使用updateNumericInputupdateTextInput函數。您還需要通過一個session變量來獲得您的server函數。

runApp(
    list(ui = pageWithSidebar(
    headerPanel("My data table"), 
    sidebarPanel(h5("Enter input"), 
       textInput("colname","Enter Column Name",NA), 
       numericInput("x","X",NA), 
       numericInput("y","Y",NA), 
       br(), 
       actionButton("Add","ADD")), 
    mainPanel(tableOutput("out")) 
), 

    server = function(input,output,session){ 
    myValues <- reactiveValues() 

    observe({ 
     if(input$Add > 0){ 
     isolate({ 
      colnm <- input$colname 
      x <- input$x 
      y <- input$y 
      if(!is.null(myValues$myDf)){ 
      myValues$myDf <- cbind(myValues$myDf, 
            data.frame(setNames(list(c(x, y)), colnm)) 
      ) 
      }else{ 
      myValues$myDf <- data.frame(setNames(list(c(x, y)), colnm)) 
      } 

     }) 
     updateNumericInput(session, "x","X", NA) 
     updateNumericInput(session, "y","Y", NA) 
     updateTextInput(session, "colname","Enter Column Name",NA) 
     } 
    }) 

    output$out <- renderTable({ 
     myValues$myDf 
    }) 

    }) 
) 

編輯:

你可以改變

updateNumericInput(session, "x","X", 3) 
    updateNumericInput(session, "y","Y", 5) 
    updateTextInput(session, "colname","Enter Column Name",'Default NAME') 

和它的作品。現在,這些值更改爲默認值3,5和'默認名稱'

+0

我很好奇,不知道可以在單個文件中運行應用程序,這是個好主意。我不清楚NAs在更新數字和文本輸入功能中的作用。我想這是什麼設置字段清空或清除字段?此外,我試圖將NA更改爲NA以外的值,但應用程序掛起並且不返回表格或添加列,請問可能會對此負責? –

+0

NA表示空值。您可以將數值NA更改爲數字,將文本更改爲字符並且可以工作。 – jdharrison

+0

我確實改變了NA值,但是當我點擊添加時,它沒有帶出任何東西。另外,我必須使用觀察功能嗎?如果是這樣,爲什麼?我一直在使用沒有觀察功能的動作按鈕。它究竟做了什麼? –

相關問題