簡體   English   中英

閃亮-react()在兩個react()之間進行選擇

[英]shiny - reactive() to select between two reactive()

我正在使用Shiny制作一個應用程序,該應用程序允許用戶上傳數據或上傳保存文件。

如果用戶上傳新數據,則流程如下所示:

上傳文件>>選擇工作表>>選擇列>>句子標記化>>單詞標記化>>圖形

最初,我一直將observe()語句與reactorValues()一起使用,因此在每一步中,我都將結果存儲到reactiveValues()中。 這樣可以使保存文件上載的工作方式如下:

上傳保存文件>>設置句子>>設置單詞>>圖形

我希望能夠完成類似的事情,但要使用react()語句。 因此,鑒於我已經上uploadedFiles = reactive()uploadedSave = reactive() ,我如何使用以下偽代碼編寫反應式:

rawText = reactive({
  if uploadedFiles() flushes reactivity then uploadedFiles()
  else if uploadedSave() flushes reactivity then uploadedSave()
  else NULL
})

我沒有要嘗試解決的“錯誤”,只是試圖思考使用反應式充當“最近刷新”門的過程,以允許我的數據流從兩個不同的地方開始並收斂到一個。

我將展示如何做到這一點,但我覺得這不是一個好方法。 我有興趣了解什么是最好的方法以及我的問題在哪里。

new_react <- reactiveValues()
new_react$FilesReact <- 0 
new_react$SaveReact <- 0

invalidate <- function(x) x <- x+1

uploadedSave <- eventReactive(new_react$SaveReact,{ 
   # Set sentences >> Set words >> Graphics
})


uploadedFiles <- eventReactive(new_react$FilesReact,{ 
  # Select Sheets >> Select Columns >> Sentence Tokenization >> Word Tokenization >> Graphics
})

## I don't know how you are going to determine whether it's a data file
# or a save file...

if (its_a_save_file) {
  new_react$SaveReact <- invalidate(new_react$SaveReact)
  uploadedSave()
}else if (its_a_data_file) {
  new_react$FilesReact <- invalidate(new_react$FilesReact)
  uploadedFiles()

因此,基本上我只定義了兩個反應性值,當這些反應性值被該簡單函數無效時,它們將允許調用反應性函數, uploadedSave()uploadedFiles()

編輯:對我來說,這似乎是一種強制eventReactive()類似於observeEvent()

沒有更多的代碼,很難具體說明。 這是一個應用程序。 根據最后使用的控件顯示不同的值。 控件使用observeEvent()進行監視,並且每個控件都會將其input放入響應值。 然后, output僅適用於無功值中的任何值。 對於您的情況,您需要為要用來做文件和保存上載的每個控件有一個observeEvent() 然后,它們各自將文件放入一個公共的reactiveValue並將該值用於進一步處理。

library(shiny)

app<-shinyApp(
  ui=(fluidPage(sliderInput("First", min=1, max=10, label="Slider", value=1),
                actionButton("Second", label="Second Button"),
                textOutput("OutText"))
    ),

  server=function(input,output){

    RV<-reactiveValues(data=NULL)

    observeEvent(input$First,
      RV$Text<-input$First)

    observeEvent(input$Second,
       RV$Text<-"Second")

    output$OutText<-renderText({
      req(RV$Text)
      RV$Text
    })
  }
)

runApp(app)

暫無
暫無

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

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