我几天前刚开始用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"))),
))
答案 0 :(得分:0)
正如@ zero323所说,结果已经缓存,但如果您真的想要,可以在按下按钮时使用unlist
启动:
observeEvent()
每按一次按钮,此按钮只会触发一次。您可能还想检查observeEvent(input$your_button_id, {
number_array <- strsplit(input$text, ",")
as.numeric(number_array[[1]])
})
或NULL
变量。