R блестящее приложение - Изменить значение в DT и обновить - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть блестящее приложение, в котором одна из функций позволяет пользователю редактировать значения в таблице, и при нажатии на кнопку запуска он будет использовать пользовательские входные данные в качестве значения для функции, а затем обновлять результаты в той же таблице.,Ниже приведен пример текущей таблицы и ожидаемой таблицы.Поэтому в первой таблице, если пользователь изменяет значения тока для каналов A и C и нажимает кнопку «Выполнить», он должен обновиться до значений, отраженных в таблице ожидаемый результат .

Итак, мой вопрос, возможно ли принять редактируемые значения DT в качестве входных данных для функции.

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    DT::dataTableOutput("x1"),
    actionButton("opt_run", "Run"),
    tags$h1("Expected Output"),
    DT::dataTableOutput("x2")
  ),
  server = function(input, output, session) {

    df <- data.table(Channel = c("A", "B","C"),
                     Current = c("2000", "3000","4000"),
                     Modified = c("2500", "3500","3000"),
                     New_Membership = c("450", "650","700"))

    output$x1 = renderDT(df, selection = 'none', editable = TRUE)

    expdf <- data.table(Channel = c("A", "B","C"),
                     Current = c("3000", "3000","5000"),
                     Modified = c("3500", "3500","6000"),
                     New_Membership = c("650", "650","1100"))

    output$x2 = renderDT(expdf, selection = 'none', editable = TRUE)

    })
  }
)

1 Ответ

0 голосов
/ 21 февраля 2019

Я не был уверен, хотите ли вы, чтобы они хранились глобально или нет.Я дам вам глобальную версию, чтобы вы могли сохранить ее где-нибудь, на БД или на диске:

Вы можете получить доступ к значениям ячеек, используя input$x1_cell_edit, обратите внимание, что я нажимаю F5, чтобы обновить страницупроверить, были ли сохранены значения

library(shiny)
library(DT)
options(stringsAsFactors = F)

df <- data.frame(Channel = c("A", "B","C"),
                 Current = c("2000", "3000","4000"),
                 Modified = c("2500", "3500","3000"),
                 New_Membership = c("450", "650","700"))

expdf <- data.frame(Channel = c("A", "B","C"),
                    Current = c("3000", "3000","5000"),
                    Modified = c("3500", "3500","6000"),
                    New_Membership = c("650", "650","1100"))

shinyApp(
  ui = fluidPage(
    DT::dataTableOutput("x1"),
    tags$h1("Expected Output"),
    DT::dataTableOutput("x2")
  ),
  server = function(input, output, session) {

    output$x1 = renderDT(df, selection = 'none', editable = TRUE)

    observeEvent(input$x1_cell_edit, {
      df[input$x1_cell_edit$row,input$x1_cell_edit$col] <<- input$x1_cell_edit$value
    })

    output$x2 = renderDT(expdf, selection = 'none', editable = TRUE)
    observeEvent(input$x2_cell_edit, {
      expdf[input$x2_cell_edit$row,input$x2_cell_edit$col] <<- input$x2_cell_edit$value
    })
  })
}
)

enter image description here

...