有没有一种方法可以将dataTableProxy Shiny对象转换为R data.frame对象?

时间:2019-10-14 21:14:19

标签: shiny

我是Shiny R包的新手,我正在尝试使其能够通过dataTableOutput打开data.frame,在Shiny会话中对其进行修改,然后将该修改另存为R data.frame对象。

我已经能够在会话中放置一个data.frame“ dados”并使用DT包对其进行修改。每次单击更新时,都会修改代理数据表。我正在努力使dado也得到更新。我认为,rhsonsontable包的hot_to_r函数会有所帮助,但我不知道如何使它起作用。下面是有效的代码。

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)

我期望的结果是针对在Shiny会话中打开和修改的data.frame以匹配该会话的数据表。

0 个答案:

没有答案