我是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以匹配该会话的数据表。