我现在正在尝试构建我的第一个Shiny应用程序,并且遇到了一些问题。是否可以从其他输出对象访问变量?我正在尝试在第一个标签中打印表格,并在单独的标签上显示各个图,如果我可以在一个标签上显示所有3个标签,那就更好了。
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Table", tableOutput("dataTable")),
tabPanel("xy Chart", plotOutput("xyChart")),
tabPanel("yz Chart", plotOutput("yzChart"))
)
)
)
)
)
server <- function(input, output) {
output$dataTable <- renderTable({
x <- rnorm(100, mean = 1)
y <- rnorm(100, mean = 0)
z <- rnorm(100, mean = 0.5)
dataTable <- cbind(x,y,z)
})
output$xyChart <- renderPlot({
plot(x,y)
})
答案 0 :(得分:1)
如果还没有,请看shiny
教程available。
您可以在其他地方声明这些变量,而不是将数据包含在output
内的单个server
中。由于您正在创建shiny
应用程序,因此您可能会对更改这些变量以及让其他outputs
自动更新感兴趣。
如果是这样,您可能要使用reactiveValues
或创建一个reactive
函数。
下面是一个示例。通过使用reactiveValues
,当您从其中读取一个值(例如x,y或z)时,调用表达式对该值具有反应性依赖性(并将对其进行更改以进行更新)。每当您修改这些值时,它将通知所有依赖于该值的反应式功能。
library(shiny)
ui <- fluidPage(
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Plot", plotOutput("plot")),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Table", tableOutput("table"))
)
)
)
server <- function(input, output) {
my_data <- reactiveValues(
x = rnorm(100, mean = 1),
y = rnorm(100, mean = 0),
z = rnorm(100, mean = 0.5)
)
output$table <- renderTable({
data.frame(my_data$x, my_data$y, my_data$z)
})
output$plot <- renderPlot({
plot(my_data$x, my_data$y)
})
output$summary <- renderText({
"Summary Goes Here"
})
}
shinyApp(ui = ui, server = server)
如果要在一个面板上全部使用3个(如注释所述),请将其用于ui
:
ui <- fluidPage(
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("All 3",
plotOutput("plot"),
verbatimTextOutput("summary"),
tableOutput("table")
)
)
)
)
如果要包括input$nRV
(如注释中所述),请使用reactive
表达式,并将其称为my_data()
:
server <- function(input, output) {
my_data <- reactive({
a = rnorm(input$nRV, mean = 2)
b = rnorm(input$nRV, mean = 5)
x = rnorm(input$nRV, mean = 3)
y = rnorm(input$nRV, mean = 0)
z = rnorm(input$nRV, mean = 0.5)
data.frame(a, b, x, y, z)
})
output$table <- renderTable({ data.frame(my_data()$x, my_data()$y, my_data()$z)
})
output$plot <- renderPlot({ plot(my_data()$x, my_data()$y) })
}