2017-05-11 40 views
0

アプリケーションユーザーがドロップダウンリストから何かを選択し、データフレームに変換する数値を入力します。ボタンをn回クリックすると同じ項目が選択された場合、元の値が置き換えられます。そうでない場合は、新しい値がデータフレームにバインドされます。なぜ私のデータフレームに奇妙なヘッダがあるのか​​分かりません。ありがとう、助けてください。Rのデータフレームの条件付きバインドShiny

ui <- fluidPage(
    selectInput("solvent", "Choose a solvent:", 
       list(`Solvent` = c("ETOH", "SALINE", "DW5",'CREMOPHOR','WATER','DMSO','2% KLUCEL (pH=4 /w HCl)') 
    )), 
    numericInput('vol','Vol solvent (ml)',0), 
    actionButton('add','Add'), 
    textOutput("result"), 
    tableOutput('table') 
) 
    server = function(input, output) { 

    rv <- reactiveValues() 
     observeEvent(input$add,{rv$data<-data.frame(c(input$solvent,input$vol)); setNames(rv$data,input$solvent); 
     if (as.numeric(input$add)>1 & colnames(rv$data) == input$solvent) 
     {rv$data[1,input$solvent] = input$vol} 
     else {cbind(rv$data,data.frame(input$solvent,input$vol))} 
     }) 
    output$table<-renderTable({ rv$data}) 

    output$result <- renderText({ 
     paste("You chose", input$solvent) 
    }) 
    } 

shinyApp(ui, server) 

enter image description here

+0

名(データフレーム)< - NULLの助けを – Ars

答えて

1

空のデータフレームを充填した値を上書きするには、残念ながら、二ライナーよりも少しを必要とします。私は、次のことをお勧め:

rv <- reactiveValues() 

    observeEvent(input$add, { 
    if(is.null(rv$data)){ 
     rv$data <- data.frame(input$vol) 
     names(rv$data) <- input$solvent 
    } 
    rv$data[input$solvent] <- input$vol 
    }) 

あなたは以下の見つけることができますフルバージョン:

ui <- fluidPage(
    selectInput("solvent", "Choose a solvent:", 
       list(`Solvent` = c("ETOH", "SALINE", "DW5",'CREMOPHOR','WATER','DMSO','2% KLUCEL (pH=4 /w HCl)') 
      )), 
    numericInput('vol','Vol solvent (ml)',0), 
    actionButton('add','Add'), 
    textOutput("result"), 
    tableOutput('table') 
) 
server = function(input, output) { 

    rv <- reactiveValues() 

    observeEvent(input$add, { 
    if(is.null(rv$data)){ 
     rv$data <- data.frame(input$vol) 
     names(rv$data) <- input$solvent 
    } 
    rv$data[input$solvent] <- input$vol 
    }) 

    output$table<-renderTable({ rv$data}) 

    output$result <- renderText({ 
    paste("You chose", input$solvent) 
    }) 
} 

shinyApp(ui, server) 
+0

素晴らしい、感謝を! –