首页 > 解决方案 > 在交互式 R 会话中从闪亮的应用程序返回值

问题描述

我正在使用闪亮制作一个小的交互式小部件。小部件的目的不是创建一个独立的闪亮 Web 应用程序。相反,这个想法是在交互式 R 会话中运行小部件,以允许用户使用 GUI 交互式地操作会话中的数据。然后该函数应将 Shiny 应用程序的输出返回给用户会话。

我的小部件的“真正”目的是交互式地选择绘图上的数据点,并返回选择的值作为函数的输出。然而,为了制作一个漂亮而简单的 REPREX,我选择了一个更简单的场景:

multiply_me <-
  function(number1) {
    require(shiny)
    
    shinyApp(
      ui = fluidPage(
        selectInput('number2', label = 'Enter multiplication factor', choices = c(1, 2, 3)),
        textOutput('result')
        ),
      
      server = function(input, output) {
        output$result = renderText(number1 * as.numeric(input$number2))
      }
    )
    
  }

在 multiply_me 函数中,用户可以从现有的交互式会话 ( number1) 中获取一个变量,然后运行multiply_me(number1)以启动闪亮的小部件。然后,该小部件允许用户在滑块上选择乘法因子并查看结果。

但是如何将计算结果 ( number1 * number 2) 返回到交互式 R 会话?

标签: rshiny

解决方案


你可以使用stopApp

multiply_me <-
  function(number1) {
    require(shiny)
    
    runApp(list(
      ui = fluidPage(
        selectInput('number2', label = 'Enter multiplication factor', choices = c(1, 2, 3)),
        textOutput('result'),
        actionButton('ok','OK')
      ),
      
      server = function(input, output) {
        output$result = renderText(number1 * as.numeric(input$number2))
        observe({
          if(input$ok){
            stopApp(number1 * as.numeric(input$number2))}
         })
       }
    ))
  }

multiply_me(1)
[1] 2

推荐阅读