用于读取R Shiny应用程序中的文件的环境



我在Shiny中创建了一个简单的GUI,用于读取一堆csv文件,然后根据每个csv第5列中的值进行过滤。然而,我不知道如何访问正确的闪亮环境。例如,在服务器功能中,我首先读取带有以下行的文件:

for (i in all_paths) {

n <- basename(i)
temp = list.files(path = i, pattern="*.csv",full.names = TRUE)
list2env(
lapply(setNames(temp, make.names(gsub(".*FRSTseg*", n, temp))), 
read.csv), envir = .GlobalEnv)
}

然后用过滤

Pattern1<-grep("*.csv",names(.GlobalEnv),value=TRUE)
all_data<-do.call("list",mget(Pattern1))

newdfs <- lapply(all_data, function(x) subset(x, x[, 5] > 0))

list2env(newdfs,globalenv())

当我运行该应用程序时,我收到一条错误消息,说它找不到我的一个csv的值,我发现它是Pattern1列表的第一个元素。所以我很确定这个应用程序在Pattern1行之后就失败了。

我认为问题是csv文件没有被读取到正确的环境中,因此all_data <- do.call...行不知道该在哪里查找。所以不用。GlobalEnv和GlobalEnv,我应该使用什么?感谢您的帮助!

我们可以使用reactiveValues并存储read_csv的结果,以便在应用程序中的所有观察程序中都可用。我创建了一个小应用程序,可以读取项目目录中不同.csv文件的第5列。在这种情况下,所有数据都将存储在一个名为column_read$files的对象中,该对象可以在任何观察者或反应器中调用。

应用程序:

library(tidyverse)
library(shiny)
set.seed(15)
#create the data
paste0('iris', 1:5, '.csv') %>% 
map(~write_csv(x = slice_sample(iris,n = 10), .x))
ui <- fluidPage(
actionButton('read_files', "Read Files"),
textOutput('columns_print')
)
server <- function(input, output, session) {

columns_read <- reactiveValues(files = NULL)


observeEvent(input$read_files, {
files <- list.files(pattern = "*.csv",full.names = TRUE)

columns_read$files <- map(files, ~read_csv(.x, col_select = 5))
})

output$columns_print <- renderPrint({
req(columns_read$files)
columns_read$files
})

}
shinyApp(ui, server)

最新更新