R Блестящий запрос пользователю выбрать каталог

Я новичок в R и R Shiny.

Для кода, который у меня есть в настоящий момент, мне нужно вручную ввести имя файла, я хотел бы обобщить случай и позволить пользователю выбрать рабочий каталог и соответствующее имя файла.

1, выберите рабочий каталог   затем блестящий способ хранить все имена файлов в выбранном рабочем каталоге. аналогично list.files()

2, тогда в файлах списка ящиков будут перечислены все имена файлов под выбранным wd   и пользователь может проверить, какой набор данных должен быть показан.

3, в основной панели   будут показаны 10 лучших экземпляров набора данных с заголовком

То, что я пробовал,

server.R

library(shiny)
setwd("C:/Users/HKGGAIT001/Google Drive/GA Project/Cargo/Cargo.Statistics/data/Hactl")
data1 <- read.csv(list.files()[1])
data2 <- read.csv(list.files()[2])

# Define server logic required to summarize and view the selected
# dataset
shinyServer(function(input, output) {

  # Return the requested dataset
  datasetInput <- reactive({
    switch(input$dataset,
           "data1" = data1,
           "data2" = data2)
  })

  # Generate a summary of the dataset
  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })

  # Show the first "n" observations
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })
})

ui.R

library(shiny)

# Define UI for dataset viewer application
shinyUI(fluidPage(

  # Application title
  titlePanel("Shiny Text"),

  # Sidebar with controls to select a dataset and specify the
  # number of observations to view
  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Choose a dataset:", 
                  choices = c("data1", "data2")),

      numericInput("obs", "Number of observations to view:", 10)
    ),

    # Show a summary of the dataset and an HTML table with the 
     # requested number of observations
    mainPanel(
      verbatimTextOutput("summary"),

      tableOutput("view")
    )
  )
))

enter image description here

Ситуация похожа на Этот веб-сайт, в то время как мой случай запрашивает пользователя, чтобы выбрать локальный рабочий каталог.

Спасибо за вашу нежную помощь.

Ответ 1

Сначала создайте файлы .csv для воспроизводимости:

write.csv(x = data.frame(V1 = 1:13, V2 = letters[1:13]),
          file = "teste1.csv", row.names = FALSE)

write.csv(x = data.frame(V1 = 14:26, V2 = letters[14:26]),
          file = "teste2.csv", row.names = FALSE)

write.csv(x = data.frame(V1 = rnorm(15), V2 = runif(15)),
          file = "teste3.csv", row.names = FALSE)

Добавить global.R script в ваше приложение может быть полезно. В этом script вы сможете:

я. позвольте пользователю выбрать рабочий каталог,

II. прочитайте файлы .csv в этой папке,

III. создайте список файлов, которые могут использоваться ui.R и server.R

# global.R
library(shiny)

wd <<- choose.dir()
setwd(wd)

csv <<- list.files(pattern = ".csv")

files <<- vector("list", length(csv))
for (i in seq_along(files)) {
  files[[i]] <- read.csv(csv[i], stringsAsFactors = FALSE)
}

list_of_datasets <<- seq_along(files)
names(list_of_datasets) <- gsub(pattern = ".csv", replacement = "", x = csv)

Затем вам просто нужно внести несколько изменений в исходные сценарии, которые вы нам предоставили. В ui.R я бы переопределил функцию selectInput, чтобы отображать имя файлов для пользователей. Кроме того, вы не можете быть уверены, что выбранная папка будет иметь 2 файла.

selectInput("dataset", "Choose a dataset:", 
            choices = list_of_datasets)

В server.R вы должны: i) удалить 2, 3 и 4 строки (уже обработанные global.R) и ii) изменить datasetInput функцию:

datasetInput <- reactive({
  files[[as.numeric(input$dataset)]]
})