ShinyServer中的全局变量

时间:2015-07-14 20:19:22

标签: r shiny

我几天前刚开始用Shiny进行黑客攻击。

在我的小玩具应用程序中,用户在文本区域中键入逗号分隔数字列表并按下提交按钮。然后计算并显示这些数字的总和,平均值和中位数。

计算sum,mean和median的shinyServer函数都调用名为my_array()的函数,该函数使用strsplit分隔逗号中的数字并返回数字列表。

我没有调用my_array()三次,而是在单击Submit按钮后调用my_array()一次并全局保存结果。然后我将使用该全局列表来计算总和,平均值和中位数。

有人可以告诉我如何在提交命中后调用my_array(),并将结果保存在全局变量中吗?我没有尝试任何工作,我见过的例子似乎没有解决我需要的问题。

感谢。

server.R

shinyServer(function(input, output) {

    my_array <- reactive ({
        number_array <- strsplit(input$text, ",")
        as.numeric(number_array[[1]])
    })

    my_sum <- reactive({
        sum(my_array())
    })

    my_mean <- reactive({
        val <- mean(my_array(), na.rm=TRUE)

        if (is.nan(val)) {
            val = ""
        } else {
            val
        }
    })

    my_median <- reactive({
        val <- median(my_array(), na.rm=TRUE)

        if (is.na(val)) {
            val = ""
        } else {
            val
        }
    })

    output$sum <- renderText({ my_sum() })
    output$mean <- renderText({ my_mean() })
    output$median <- renderText({ my_median() })   
})

ui.R

shinyUI(fluidPage(

    titlePanel("Average Calculator"),

    tags$style(type="text/css", "textarea {width:100%}"),
    tags$textarea(id = 'text', placeholder = 'Enter comma-separated numbers here', rows = 8, ""),
    submitButton("Submit"),

    hr(),

    fluidRow(column(2, strong("Sum:"), align="right"), column(3, textOutput("sum"))),
    fluidRow(column(2, strong("Mean:"), align="right"), column(3, textOutput("mean"))),
    fluidRow(column(2, strong("Median:"), align="right"), column(3, textOutput("median"))),

))

1 个答案:

答案 0 :(得分:0)

正如@ zero323所说,结果已经缓存,但如果您真的想要,可以在按下按钮时使用unlist启动:

observeEvent()

每按一次按钮,此按钮只会触发一次。您可能还想检查observeEvent(input$your_button_id, { number_array <- strsplit(input$text, ",") as.numeric(number_array[[1]]) }) NULL变量。