[英]How to isolate an element of a reactive list in shiny?
假設我在下面有以下測試應用程序。 我正在尋找的是如何復制reactiveValues
解決方案的功能。 如果您使用該應用程序,您會發現isolate
影響功能的方式有一個不同。 使用反應值,我可以選擇反應列表中的元素進行隔離。
所以如果用戶點擊按鈕1,時間總是會改變。 因此,時間將始終打印在觀察中。 如果用戶點擊同一個按鈕,由於data
沒有變化,只會顯示時間。 如果在按鈕之間切換點擊,按鈕的名稱和時間都會顯示。
您似乎無法使用reactive
復制此功能。 我的問題是我使用的真實場景reactivePoll
。 我的 reactivePoll 返回一個列表myData
比方說。 我想要做的是只有在myData$firstel
發生變化時才能進行isolate
。 但似乎任何從myData
更新的反應范式都會更新myData$firstel
更改或myData$secondel
更改。 有沒有辦法解決這個問題? 我嘗試將我的 reactivePoll 轉換為 reactiveValues 但它似乎不起作用
library(shiny)
ui <- fluidPage(
actionButton("button1","Button 1"),
actionButton("button2","Button 2"),
textOutput("output1"),
textOutput("output2")
)
server <- function(input,output,session){
myreactval <- reactiveValues(data = NULL, selection = NULL)
observeEvent(input$button1,{
myreactval$data <- Sys.time()
myreactval$selection <- "button1"
})
observeEvent(input$button2,{
myreactval$data <- Sys.time()
myreactval$selection <- "button2"
})
myreact <- eventReactive(input$button1,{
res <- list()
res$data <- Sys.time()
res$selection <- "button1"
return(res)
})
output$output1 <- renderText({ myreact()$data })
output$output2 <- renderText({ myreact()$selection })
# REACTIVE SOLUTION
# observe({
# print(myreact()$selection)
# })
# observe({
# print(isolate(myreact())$data)
# })
# REACTIVE VALUES SOLUTION
observe({
print(myreactval$selection)
})
observe({
print(isolate(myreactval)$data)
})
}
shinyApp(ui,server)
您可以使用以下代碼段將反應列表reacList
轉換為 reactiveValues object reacVals
。
reacVals <- reactiveValues()
observe(
purrr::imap(reacList(), function(val, name) {
reacVals[[name]] <- val
})
)
當reacList
中的任何元素發生變化時, reactiveValues
的所有元素都會更新。 但是,這些更新僅在元素值實際更改時才使進一步的依賴關系無效。 這意味着您可以使用reacVals
創建特定於元素的依賴項,這是您想要實現的。
我知道您已經嘗試將您的reactivePoll
object 轉換為reactiveValues
object 但這可能與您的方法不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.