簡體   English   中英

R閃亮隔離反應數據框架

[英]R shiny isolate reactive data.frame

我正在努力了解如何在R Shiny中使用isolate()reactive()

我要實現以下目標:

每當單擊“刷新”操作按鈕時:

  • 在data.frame上執行subset ,然后,

  • 將其輸入到我的函數中以重新計算值。

該子集取決於用戶已選中的一組復選框,其中大約有40個復選框。我不能將這些復選框“完全響應”,因為該功能大約需要1.5秒才能執行。 相反,我想讓用戶有機會選擇多個框,然后才單擊按鈕以(a)子集,然后(b)再次調用該函數。

為此,我將data.frame加載到server.R函數中:

df1 <- readRDS("D:/././df1.RData")

然后,我有了主要的ShinyServer函數:

shinyServer(function(input, output) {

  data_output <- reactive({
    df1 <- df1[,df1$Students %in% input$students_selected] 

    #Here I want to isolate the "students_selected" so that this is only 
    #executed once the button is clicked
  })

  output$SAT <- renderTable({
    myFunction(df1)
  })
}

怎么樣

data_output <- eventReactive(input$button, {
    df1[,df1$Students %in% input$students_selected] 
})

這是我的最小示例。

library(shiny)
ui <- list(sliderInput("num", "rowUpto", min= 1, max = 10, value = 5), 
           actionButton("btn", "update"),
           tableOutput("tbl")) 
server <- function(input, output) {
  data_output <- eventReactive(input$btn, {
    data.frame(id = 1:10, x = 11:20)[seq(input$num), ]
  })

  output$tbl <- renderTable({
    data_output()})
}

runApp(list(ui = ui, server = server))

編輯

另一個實現,更加簡潔。 默認情況下, renderTable檢查函數中所有反應式元素的更改(在本例中為input$numinput$button )。 但是,您希望它僅對按鈕做出反應。 因此,您需要將要忽略的元素放入isolate函數中。 如果省略了isolate功能,則在移動滑塊后立即更新表格。

library(shiny)
ui <- list(sliderInput("num", "rowUpto", min= 1, max = 10, value = 5), 
           actionButton("btn", "update"),
           tableOutput("tbl")) 
server <- function(input, output) {
  output$tbl <- renderTable({
    input$btn
    data.frame(id = 1:10, x = 11:20)[seq(isolate(input$num)), ]
  })
}

runApp(list(ui = ui, server = server))

請改用eventReactive

data_output <- eventReactive(input$updateButton, {

    df1 <- df1[,df1$Students %in% input$students_selected] #I think your comments are messed up here, but I'll leave the filtering formatting to you

  })

  output$SAT <- renderTable({
    data_output()
  })

在您的用戶界面中,您應該具有以下內容:

actionButton('updateButton',label = "Filter")

看?shiny :: eventReactive:

使用eventReactive創建僅響應事件而更新的計算值。 這就像一個普通的反應式表達式,只是它忽略了來自其反應式依賴關系的所有常規失效; 它僅在響應給定事件時才無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM