r - 在交互式 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 会话?
解决方案
你可以使用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