【问题标题】:shiny - reactive() to select between two reactive()闪亮的 - reactive() 在两个 reactive() 之间进行选择
【发布时间】:2016-04-20 19:01:26
【问题描述】:

我正在 Shiny 中制作一个允许用户上传数据或上传保存文件的应用程序。

如果用户上传新数据,则流程如下所示:

上传文件>>选择表格>>选择列>>句子标记>>单词标记>>图形

最初,我一直在使用带有 reactiveValues() 的 observe() 语句,所以在每一步,我都将结果存储到 reactiveValues()。这使得保存文件上传能够像这样工作:

上传保存文件>>设置句子>>设置单词>>图形

我希望能够使用 reactive() 语句来完成类似的事情。因此,鉴于我有 uploadedFiles = reactive()uploadedSave = reactive() 我如何使用以下伪代码编写反应:

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

我没有尝试解决“错误”,只是想通过使用反应式来充当“最近刷新”门的过程,以允许我的数据流从两个不同的地方并收敛到一个地方。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我将展示我是如何做到的,但我觉得这不是一个好方法。我很想知道最好的方法是什么,我的有什么问题。

    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() 一样工作的方法

    【讨论】:

      【解决方案2】:

      没有更多代码,很难具体说明。这是一个应用程序。根据上次使用的控件显示不同的值。使用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)
      

      【讨论】:

        猜你喜欢
        • 2017-08-17
        • 1970-01-01
        • 2013-02-23
        • 2017-04-28
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        相关资源
        最近更新 更多