![](/img/trans.png)
[英]R shiny: transforming reactive data.frame using reactiveValues and observe
[英]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$num
和input$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.