【发布时间】:2016-08-28 23:22:34
【问题描述】:
我有一个闪亮的应用程序,它需要来自多个文件之一的输入。一个简化的例子是:
library(shiny)
x <- matrix(rnorm(20), ncol=2)
y <- matrix(rnorm(10), ncol=4)
write.csv(x, 'test_x.csv')
write.csv(y, 'test_y.csv')
runApp(list(ui = fluidPage(
titlePanel("Choose dataset"),
sidebarLayout(
sidebarPanel(
selectInput("data", "Dataset", c("x", "y"), selected="x")
),
mainPanel(
tableOutput('contents')
)
)
)
, server = function(input, output, session){
myData <- reactive({
inFile <- paste0("test_", input$data, ".csv")
data <- read.csv(inFile, header=FALSE)
data
})
output$contents <- renderTable({
myData()
})
}))
实际上,我读入的文件很大,所以我想避免在每次 input$data 更改时读取它们,如果它已经完成了一次。例如,通过使矩阵 mat_x 和 mat_y 在环境中可用,然后在 myData 测试中:
if (!exists(paste0("mat_", input$data))) {
inFile <- paste0("test_", input$data, ".csv")
data <- read.csv(inFile, header=FALSE)
assign(paste0("mat_", input$data), data)
}
有没有办法做到这一点,还是我必须为 mat_x 和 mat_y 创建一个单独的反应并在 myData 中使用它?我实际上有 9 个可能的输入文件,但每个用户可能只想使用一两个。
【问题讨论】:
标签: input shiny reactive-programming