簡體   English   中英

如何隔離 shiny 中的反應列表元素?

[英]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.

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