如何使用运行函数的按钮刷新闪亮的数据表

时间:2019-04-17 16:42:03

标签: r shiny

我到处都看过,似乎无法找到必须解决的常见问题的帮助。

我在一个datatable应用中有一个shiny。当它第一次出现时,我将数据加载到其中。它由一列文字组成

我希望用户能够按下一个按钮,该按钮获取datatable中的数据并对其执行操作,然后显示一个带有该功能结果的datatable。该功能(未显示)基本上将单列分成几列。

我似乎无法弄清楚如何从刷新并显示新datatable的按钮中运行功能。

这是我到目前为止所拥有的:

server.R

library(shiny)
library(EndoMineR)

RV <- reactiveValues(data = PathDataFrameFinalColon)


server <- function(input, output) {
  output$mytable = DT::renderDT({
    RV$data
  })
output2$mytable = DT::renderDT({
    RV$data<-myCustomFunction(RV$data)
  })

}

ui.R

library(shiny)


basicPage(
  fluidPage(
  DT::dataTableOutput("mytable")
))

基本上,如何允许页面上的按钮运行特定的功能,然后再更新数据表?

2 个答案:

答案 0 :(得分:0)

您可以使用observeEvent()ignoreInit = TRUE,以便在不应用功能的情况下呈现初始数据帧。

server <- function(input, output) {
  RV <- reactiveValues(data = PathDataFrameFinalColon)

  output$mytable = DT::renderDT({
    RV$data
  })

  observeEvent(input$my_button,{
    RV$data<-myCustomFunction(RV$data)
  },ignoreInit = TRUE)

}

ui <- basicPage(
  fluidPage(
    DT::dataTableOutput("mytable"),
    actionButton("my_button",label = "Run Function")
))

答案 1 :(得分:0)

希望这对您有所帮助。玩得开心;

library(shiny)
library(shinydashboard)


dat = data.frame(id = c("d","a","c","b"), a = c(1,2,3,4), b = c(6,7,8,9))

header <- dashboardHeader(

)

sidebar <- dashboardSidebar(
  tags$head(tags$style(HTML('.content-wrapper { height: 1500px !important;}'))),
  sidebarMenu (
    menuItem("A", tabName = "d1"),
    menuItem("B", tabName = "d2"),
    menuItem("C", tabName = "d3")
  )
)

body <- dashboardBody(

  tabItems(
    tabItem(tabName = "d1",
            box(title = "AAA",
                actionButton("refreshTab1_id", "Refresh Tab 1"),
                actionButton("sortTable1_id", "Sort Table 1"),
                DT::dataTableOutput("table_for_tab_1", width = "100%"))
    ),
    tabItem(tabName = "d2",
             box(title = "BBB",
                actionButton("refreshTab2_id", "Refresh Tab 2"),
                actionButton("sortTable2_id", "Sort Table 2"),
                DT::dataTableOutput("table_for_tab_2", width = "100%"))
    ),
    tabItem(tabName = "d3",
            box(title = "CCC",
                actionButton("refreshTab3_id", "Refresh Tab 3"),
                actionButton("sortTable3_id", "Sort Table 3"),
                DT::dataTableOutput("table_for_tab_3", width = "100%"))
    )
  )
)

# UI
ui <- dashboardPage(header, sidebar, body)

# Server
server <- function(input, output, session) {


    observe({

        if (input$sortTable1_id || input$sortTable2_id || input$sortTable3_id) {
            dat_1 = dat %>% dplyr::arrange(id)
        } else {
            dat_1 = dat
        }

        output$table_for_tab_1 <- output$table_for_tab_2 <- output$table_for_tab_3 <- DT::renderDataTable({ 

            DT::datatable(dat_1, 
                    filter = 'bottom', 
                    selection = "single",
                    colnames = c("Id", "A", "B"),
                    options = list(pageLength = 10,
                                    autoWidth = TRUE#,
                                    # columnDefs = list(list(targets = 9, 
                                    #                        visible = FALSE))
                    )
            )
        })
    })

    observe({
        if (input$refreshTab1_id || input$refreshTab2_id || input$refreshTab3_id) {
            session$reload()
        }
    })

}

# Shiny dashboard
shiny::shinyApp(ui, server)