我有一个闪亮的应用程序,我在其中定义基于滑块的对象并从中创建data.frame
。这用于创建一个图,我想在其下面包含一个汇总表。我的问题是必须在反应对象内部定义绘图以根据滑块进行更新,但我发现当我尝试访问对象以在不同的反应对象内打印摘要时,它没有找到。
我想两次运行相同的计算代码只是为了让对象进入另一个反应对象。我的两个初步想法:
save(object, file = "...")
,然后将load(file = "...")
放在第二个,但不会更新。plotOutput
定义之外定义我的对象,但我很确定它会在用户输入改变时不会更新;它将保留初始input
对象默认设置的值。嗯,刚开始尝试后一种想法,它甚至没有那么远:
shinyServer(...)
之前,但它无法生成数据,因为我的调用取决于input
,并且此时不知道input
。shinyServer(...)
之后,但在renderPlot(...)
之前尝试为所有输出对象制作一个“全局可用”对象,并责备我试图做一些使用{{1}的事情在反应函数之外。这是一个例子来说明,修改自Shiny的"Hello Shiny!" example:
ui.R
input
server.R
library(shiny)
# Define UI for application that plots random distributions
shinyUI(pageWithSidebar(
# Application title
headerPanel("Hello Shiny!"),
# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot"),
tableOutput("summary")
)
))
如果按原样运行,library(shiny)
# Define server logic required to generate and plot a random distribution
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
output$summary <- renderTable({
#dist <- rnorm(input$obs)
summary <- table(data.frame(cut(dist, 10)))
})
})
将抛出错误,因为它不知道cut
。如果您取消注释我们在dist
中重新定义dist
的行,那么它就会有用。
这是一个简单的代码 - 我的相关程度更高,我真的不想再运行两次,只是为了让另一个反应输出知道相同的结果。
建议?
答案 0 :(得分:3)
为了根据other question I consider mine to have duplicated中的答案充实上面的示例,代码看起来像这样:
library(shiny)
# Define server logic required to generate and plot a random distribution
shinyServer(function(input, output) {
dist <- reactive(rnorm(input$obs))
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- dist()
hist(dist)
})
output$summary <- renderTable({
dist <- dist()
summary <- table(data.frame(cut(dist, 10)))
})
})