我有一個閃亮的應用程序,需要從幾個文件之一的輸入。一個簡單的例子是:避免重新加載數據集中的反應閃亮
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()
})
}))
在現實中,我讀出的文件大很多,所以我想以避免讀到他們每次輸入$數據的變化,如果它已經做了一次。例如,通過使矩陣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個可能的輸入文件,但每個用戶可能只想使用一個或兩個。
剛剛發現我可以將加載的對象放入reactiveValues()中。這不是優雅,但它似乎工作。 –