在交互式R会话中从闪亮的应用程序返回值

在交互式R会话中从闪亮的应用程序返回值,r,shiny,R,Shiny,我正在使用shiny制作一个小的交互式小部件。小部件的目的不是创建一个独立的闪亮web应用程序。相反,我们的想法是在交互式R会话中运行小部件,以允许用户使用GUI交互操作会话中的数据。然后,函数应将Shining应用程序的输出返回给用户会话 “我的小部件”的“真正”用途是以交互方式选择绘图上的数据点,并返回选择作为函数输出的值。然而,为了制作一个漂亮而简单的REPREX,我选择了一个更简单的场景: multiply_me <- function(number1) { requi

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

“我的小部件”的“真正”用途是以交互方式选择绘图上的数据点,并返回选择作为函数输出的值。然而,为了制作一个漂亮而简单的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_menumber1来启动这个小部件。然后,小部件允许用户在滑块上选择乘法因子并查看结果

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

您可以使用stopApp:

您可以使用stopApp:

您还可以在闪亮的小工具中使用stopApp:

library(shiny)
library(miniUI)

multiply_me <- function(number1) {
  
  ui <- miniPage(
    gadgetTitleBar("My Gadget"),
    miniContentPanel(
      selectInput(
        'number2', label = 'Enter multiplication factor', choices = c(1, 2, 3)
      ),
      textOutput('result')
    )
  )
  
  server <- function(input, output, session) {
    
    result <- reactive({
      number1 * as.numeric(input$number2)
    })

    output$result <- renderText(result())
    
    observeEvent(input$done, {
      returnValue <- result()
      stopApp(returnValue)
    })
    
    observeEvent(input$cancel, {
      stopApp()
    })
    
  }
  
  runGadget(ui, server)
}
该小工具在RStudio查看器中打开,它有两个按钮“完成”和“取消”,因此您无需执行这些按钮。

您也可以在闪亮的小工具中使用stopApp:

library(shiny)
library(miniUI)

multiply_me <- function(number1) {
  
  ui <- miniPage(
    gadgetTitleBar("My Gadget"),
    miniContentPanel(
      selectInput(
        'number2', label = 'Enter multiplication factor', choices = c(1, 2, 3)
      ),
      textOutput('result')
    )
  )
  
  server <- function(input, output, session) {
    
    result <- reactive({
      number1 * as.numeric(input$number2)
    })

    output$result <- renderText(result())
    
    observeEvent(input$done, {
      returnValue <- result()
      stopApp(returnValue)
    })
    
    observeEvent(input$cancel, {
      stopApp()
    })
    
  }
  
  runGadget(ui, server)
}

该小工具将在RStudio查看器中打开,它有两个按钮“完成”和“取消”,因此您无需执行这些按钮。

您可以使用@Stéphanelant将结果存储在全局环境中。尽管如果可能的话,我还是希望能够将值作为函数返回,以获得更大的安全性和灵活性。对于更复杂的现实世界应用程序,例如,我希望能够多次运行应用程序以生成不同的输出,以查看在小部件中选择不同数据点的效果。您可以使用@Stéphanelant将结果存储在全局环境中。尽管如果可能的话,我还是希望能够将值作为函数返回,以获得更大的安全性和灵活性。对于更复杂的现实世界应用程序,例如,我希望能够多次运行应用程序以生成不同的输出,以查看在小部件中选择不同数据点的效果。