我希望用户能够编辑已经加载的DataTable,单击一个按钮,然后将编辑后的版本用作输入来完成工作。因此,在此示例中,如何在单击“更改数据帧”按钮时使新的用户编辑版本显示在“新建”选项卡中?
shinyUI(fluidPage(
titlePanel(),
sidebarLayout(
sidebarPanel(
actionButton("runButton","Change Dataframes")
),
mainPanel(
tabsetPanel(
tabPanel("OldIrisTab",
DT::dataTableOutput("OldIris")),
tabPanel("OldPetrolTab",
DT::dataTableOutput("OldPetrol")),
tabPanel("NewIrisTab",
DT::dataTableOutput("NewIris")),
tabPanel("NewPetrolTab",
DT::dataTableOutput("NewPetrol"))
)
)
)
))
shinyServer(function(input,output){
output$OldIris <- DT::renderDataTable({
datatable(iris,editable=T)
})
output$OldPetrol <- DT::renderDataTable({
datatable(petrol,editable=T)
})
######
# HERES WHERE I'M NOT REALLY SURE WHAT TO DO
change_data1 <- eventReactive(input$runButton, {
withProgress(message="Generating new dataframes",{
newdf1 <- datatable(output$OldIris)
newdf1
})
})
change_data2 <- eventReactive(input$runButton, {
withProgress(message="Generating new dataframes",{
newdf2 <- datatable(output$OldPetrol)
newdf1
})
})
output$NewIris <- DT::renderDataTable({
datatable(change_data1())
})
output$NewPetrol <- DT::renderDataTable({
datatable(change_data2())
})
#######
######
})
答案 0 :(得分:7)
使用rhandsontable
包:
library(shiny)
library(rhandsontable)
ui <- shinyUI(fluidPage(
titlePanel("Ttile"),
sidebarLayout(
sidebarPanel(
actionButton("runButton","Change Dataframes")
),
mainPanel(
tabsetPanel(
tabPanel("OldIrisTab",
rHandsontableOutput('OldIris')),
tabPanel("NewIrisTab",
DT::dataTableOutput("NewIris"))
)
)
)
))
server <- function(input,output,session)({
values <- reactiveValues()
output$OldIris <- renderRHandsontable({
rhandsontable(as.data.frame(iris))
})
observeEvent(input$runButton, {
values$data <- hot_to_r(input$OldIris)
})
output$NewIris <- DT::renderDataTable({
datatable(values$data)
})
})
shinyApp(ui, server)
我希望它有所帮助。您也可以查看此answer