我正在尝试设置一个闪亮的应用程序,我想给用户三个步骤来播放数据。我在这里构建了一个例子。使用用户输入(数据长度)在第一步生成数据。在第二步中,用户决定他想用什么参数来乘以数据。在第三个中,他获得了他输入的行数的向量的总和。这个例子与我的场景类似。在我的实际场景中,第一步是从服务器提取数据以供参数用户决定&这需要很多时间。我不想在后面的步骤中重复这一步骤。我只想弄清楚一种方法只能使这种情况发生一次,后面的步骤使用第一步中生成的data
。
ui.R
library(shiny)
shinyUI(
fluidPage(
titlePanel("Reactivity & Global Variable"),
sidebarLayout(
sidebarPanel(
textInput("box1", "Observations", "100"),
actionButton("go1", "Go"),
br(),
textInput("box2", "Multiplication Factor", "2"),
actionButton("go2", "Go"),
br(),
textInput("box3", "Rows to Add", "50"),
actionButton("go3", "Go"),
br()
),
mainPanel(
h3(textOutput("obox1", container = span)),
h3(textOutput("obox2", container = span)),
h3(textOutput("obox3", container = span))
)
)
)
)
server.R
shinyServer(function(input, output) {
a1st<-eventReactive(input$go1, {
input$box1
})
output$obox1 <- renderText({
data<-seq(1:as.numeric(a1st())
})
a2st<-eventReactive(input$go2, {
input$box2
})
output$obox2 <- renderText({
data<-seq(1:as.numeric(a1st()))
data*as.numeric(a2st())
})
a3st<-eventReactive(input$go3, {
input$box3
})
output$obox3 <- renderText({
data<-seq(1:as.numeric(a1st()))
data<-data*as.numeric(a2st())
sum(data[1:as.numeric(a3st())])
})
})
答案 0 :(得分:0)
尝试
shinyServer(function(input, output) {
a1st<-eventReactive(input$go1, { seq(1:as.numeric(input$box1)) })
output$obox1 <- renderText({ a1st() })
a2st<-eventReactive(input$go2, { input$box2 })
output$obox2 <- renderText({ data<-a1st() data*as.numeric(a2st()) })
a3st<-eventReactive(input$go3, { input$box3 })
output$obox3 <- renderText({ data<-a1st() data<-data*as.numeric(a2st()) sum(data[1:as.numeric(a3st())]) })
})
要检查仅生成一次的数据,您可以添加print
a1st<-eventReactive(input$go1, { print("generate") seq(1:as.numeric(input$box1)) })
“生成”仅在您点击go1
,
如果您不想在会话之间保存数据,则不需要使用全局环境(您可以使用reactiveValues
或reactiveEvent
仅在go1
时更改