2016-11-25 2 views
1

Я пишу блестящее приложение, в котором есть таблица (с использованием), из которой пользователи могут выбрать строку. Но я хочу, чтобы пользователь также мог добавлять новые строки, если то, что они хотят, еще не указано в таблице. Я использую элементы управления ввода для ввода новых данных, и у меня есть кнопка действия, которая при нажатии должна создать новую строку данных в таблице из входных значений. Но нажатие кнопки не обновляет таблицу.В Shiny обновите DataTable с новыми значениями из пользовательского ввода

Минимальный пример:

library(shiny) 
library(DT) 
mydata = data.frame(id=letters[1:5], val=sample(10,5,T)) 

ui = fluidPage(dataTableOutput("table"), 
       textInput('NewID', 'Enter new ID'), 
       numericInput('NewVal', 'Enter new val', 1), 
       actionButton("goButton", "Update Table")) 

server = function(input,output){ 
    output$table = renderDataTable(mydata) 
    update = eventReactive(input$goButton, { 
    newrow = data.frame(id = input$NewID, val = input$NewVal) 
    mydata = rbind(mydata, newrow) 
    }) 
} 

shinyApp(ui,server) 

Очевидно, что это неправильный способ приблизиться к этому. Я пробовал различные комбинации обертывания как renderDataTable, так и код для обновления mydata внутри renderUI, observe и reactive, но я не могу найти правильный путь для этого.

Это мое первое блестящее приложение, поэтому, возможно, есть базовая концепция, которую я не совсем понимаю. Каков правильный путь?

+0

'Ошибка в силу (по умолчанию): аргумент«значение»отсутствует, без default' – HubertL

+0

@HubertL Вы получаете эту ошибку, когда паста и запустить код? Это работает для меня. – dww

+0

Мне нужно предоставить параметр 'value' для' numericInput() ' – HubertL

ответ

1

Вы можете визуализировать результат в eventReactive, на котором вы добавили новый файл. Не забудьте использовать <<- изменить глобальный набор данных, а также:

server = function(input,output){ 
    output$table <- renderDataTable(df()) 
    df <- eventReactive(input$goButton, { 
    if(input$NewID!="" && !is.null(input$NewVal) && input$goButton>0){ 
     newrow = data.table(id = input$NewID, 
         val = input$NewVal) 
     mydata <<- rbind(mydata, newrow) 
     } 
    mydata 
    }, ignoreNULL = FALSE) 
} 
+0

Отлично! Это очень близко. Единственная небольшая проблема заключается в том, что она добавляет новую строку с пустым идентификатором до нажатия кнопки. Вы знаете, как подавить это? – dww

+0

Я добавил проверку 'input $ goButton> 0', то есть нажата кнопка – HubertL

+0

Это вызывает ошибку сейчас – user5249203

Смежные вопросы