r - 如何从另一个输出访问变量
问题描述
我目前正在尝试构建我的第一个 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)
})
解决方案
如果您还没有,请查看可用shiny
的教程。
您可以在其他地方声明这些变量,而不是将您的数据包含在单个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) })
}
推荐阅读
- c# - String.Split() 方法:编译器选择了错误的重载
- r - Dplyr:使用因子级别重命名小标题输出列
- r - 在特定轴刻度上应用粗体字
- javascript - 我的列表的 setValue 未使用当前值更新后的 setItem
- python - 导入前在 pytest 中打补丁
- python - 从 subprocess.run 使用“./”运行二进制文件
- flutter - Flutter如何在flutter中显示列表--每行2个项目
- c++ - 查看 C++ 映射中是否存在键
- python - 如何从熊猫系列中提取值
- security - keycloak 能否为其背后暴露的工具提供登录