Я новичок в пакете Shiny R и пытаюсь сделать так, чтобы я мог открыть data.frame через dataTableOutput, изменить его в сеансе Shiny, а затем сохранить эту модификацию как объект R data.frame.
Я уже смог поместить data.frame "dados" в сессию и изменить его с помощью пакета DT. При каждом нажатии кнопки «Обновить» таблица данных прокси изменяется;Я пытаюсь сделать так, чтобы дадос тоже обновлялся. Я думаю, что функция hot_to_r пакета rhandsontable помогла бы, но я не мог понять, как заставить это работать. Ниже у меня есть код того, что работает.
library(shiny)
library(tidyverse)
library(DT)
library(rhandsontable)
ui <- bootstrapPage(
div(style="display:inline-block",textInput(inputId="input1", label="Input 1", value = "Input 1")),
div(style="display:inline-block",textInput(inputId="input2", label="Input 2", value = "Input 2")),
dataTableOutput("tabela"),
actionButton("update", "Update View")
)
server <- function(input, output) {
dados <- read.csv(text = "name, birth")
dados[nrow(dados)+1,] <- c("name", "birth")
new_name <- function(x){
dados %>%
slice(1) %>%
# transpose the first row of test into two columns
gather(key = "column_name", value = "value") %>%
# replace all values with ""
mutate(value = x) %>%
# reshape the data from long to wide
spread(column_name, value) %>%
# rearrange the column order to match that of test
select(colnames(dados))
}
output$tabela <- renderDataTable(
dados
, server = FALSE
, editable = TRUE
, options = list(lengthChange = TRUE)
, rownames = FALSE)
proxy <- dataTableProxy(outputId = "tabela")
observeEvent(eventExpr = input$update, {
proxy %>%
addRow(new_name(c(input$input1, input$input2)))
#update dados here
})
}
shinyApp(ui = ui, server = server)
Ожидаемые результаты были получены для data.frame, открытого и измененного в сеансе Shiny, чтобы соответствовать таблице данных сеанса.