2017-10-16 16 views
1

私はShinyでアプリケーションを開発していますが、動的に作成されたtextBoxに入力された値を合計することに固執しました。私は動的に作成されたテキストボックスに入力された値にアクセスする方法を知りたい。次のように使用RShinyの動的に作成されたテキストボックスに値を追加するには

RCODEは次のとおりです。

library(shiny) 
ui <- fluidPage (
    fluidRow(
    column(3,numericInput("count", "No. of boxes",value = 4, min = 2, max = 10), 
     actionButton("View","view") 

), 
), 
fluidRow(
    uiOutput("inputGroup") 
), 
fluidRow(
    column(3,wellPanel(textOutput("text3"))) 
) 
) 


sum = 0 
sumN <- function(x){ 
    sum <- sum + as.numeric(x) 
    return(sum) 
} 

server <- function(input, output, session) { 
    observeEvent(input$view, { 
    output$inputGroup = renderUI({ 
     input_list <- lapply(1:(input$count), function(i) { 
     inputName <- paste("id", i, sep = "") 
     textInputRow<-function (inputId,value) 
     { 
      textAreaInput(inputName,"", width = "200px", height = "43px", resize = "horizontal") 
     } 
     column(4, 
       textInputRow(inputName, "") 
     ) 

     }) 
     do.call(tagList, input_list) 

    }) 

    }) 
    getvalues <- reactive({ 
    tot <- input$count 
    for(lim in 1:tot){ 
     if(lim %% 3 == 1) 
     val <- reactive({sumN(as.numeric(input[[paste0("id",lim)]]))}) 
    } 
    }) 

    output$text3 <- renderText({ 
    getvalues() 
    }) 

    } 

shinyApp(ui=ui, server = server) 

誰もがこのコードで私を助けることができますか?事前に 感謝..

答えて

3

私は、加算機能を変更し、どのようにtextAreaInputがあまりにも生成され、見た目

require(shiny) 

ui = fluidPage(
    fluidRow(
    column(3,numericInput("count", "No. of boxes",value = 3, min = 2, max = 10),actionButton("View","view") 
    ) 
), 
    fluidRow(uiOutput("inputGroup")), 
    fluidRow(column(3,wellPanel(textOutput("text3")))) 
) 

# takes in two arguments 
sumN <- function(a, x){ 
    a <- sum(a, as.numeric(x),na.rm=T) 
    return(a) 
} 

server <- function(input, output, session) { 

    Widgets <- eventReactive(input$View,{ 
    input_list <- lapply(1:(input$count), function(i) { 
     inputName <- paste("id", i, sep = "") 
     textInputRow<-function (inputId,value) { 
     textAreaInput(inputName,"", width = "200px", height = "43px", resize = "horizontal") 
     } 
     column(4,textInputRow(inputName, "")) 
    }) 
    do.call(tagList, input_list)},ignoreInit = T) 

    output$inputGroup = renderUI({Widgets()}) 

    getvalues <- reactive({ 
    val <- 0 
    for(lim in 1:input$count){ 
     val <- sumN(val,as.numeric(input[[paste0("id",lim)]])) 
    } 
    val 
    }) 

    output$text3 <- renderText({getvalues()}) 
} 

shinyApp(ui=ui, server = server) 

enter image description here

+0

完璧な答えを持っています! (sum、x、na.rm = T) return(sum) } ''を処理するために '' sumN < - function(sum、x){ sum < - sum少なくとも1つのエントリが見つからない場合値が便利でないときに "0"を指定すると、 'output $ text3'に条件を入れることもできます。 –

+0

@AntoinePissoort https://stackoverflow.com/help/someone-answers –

+0

正しく動作します!しかし、いくつかの値がテキストボックスに入力されていない場合は、合計が表示されないことを意味します..誰も解決策を言うことができますか? –

関連する問題