单击按钮时,在Shiny应用程序的新选项卡中显示数据框的选择

时间:2018-01-05 10:22:04

标签: r shiny

我有以下Shiny应用程序

Server.R

library(dplyr)
library(rhandsontable)
options(shiny.maxRequestSize = 9*1024^2)

function(input, output) {

  values <- reactiveValues()

  Post <- c("", "")
  list2 <- c(12,13)
  df <- data.frame(Post, list2)


  output$contents <- renderRHandsontable({

    rhandsontable(df, width = 550, height = 300) %>%    
      hot_col(col = "Post", type = "dropdown")
  })

  saveData <- function(){
    finalDF <- hot_to_r(input$contents)
    newDF <- finalDF[complete.cases(finalDF),]
    return(newDF)
  }

  output$contentFinal <- renderRHandsontable(
    #finalDF <- hot_to_r(input$contents)
    return(newDF)
  )
  observeEvent(input$saveBtn, saveData())

}

UI.R

library(rhandsontable)
fluidPage(

  # App title ----
  titlePanel("Tabsets"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Tabset w/ plot, summary, and table ----
      tabsetPanel(type = "tabs",
                  tabPanel("Summary", rHandsontableOutput('contents'),
                           actionButton("saveBtn", "Save changes")
                  ),
                  tabPanel("Tab",
                           rHandsontableOutput('contentFinal'))



      )

    )
  )
)

我尝试实现的目标 - 当我点击摘要标签中的保存按钮时,我会在标签视图中看到完整案例的概述。

因此,当我在数据库的第一行中选择一个值并点击保存更改时,它应该在下一个选项卡中弹出一个数据框选择。

然而,在Tab中找不到保存中创建的newDF文件。有关如何确保过滤器弹出的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以更改服务器代码

server <- function(input, output) {

  values <- reactiveValues()

  Post <- c("", "")
  list2 <- c(12,13)
  df <- data.frame(Post, list2)


  output$contents <- renderRHandsontable({

    rhandsontable(df, width = 550, height = 300) %>%    
      hot_col(col = "Post", type = "dropdown")
  })

  saveData <- eventReactive({input$saveBtn},{
    finalDF <- hot_to_r(input$contents)
    finalDF <- as.data.frame(lapply(finalDF,function(Col){as.numeric(as.character(Col))}))
    newDF <- finalDF[complete.cases(finalDF),]
    return(newDF)
  })

  output$contentFinal <- renderRHandsontable(
    #finalDF <- hot_to_r(input$contents)
    rhandsontable(saveData())
  )
  # observeEvent(input$saveBtn, saveData())

}

enter image description here

希望这有帮助!