R Shiny请求用户选择目录

时间:2014-08-25 08:58:18

标签: r shiny

我是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

情况类似于This website,而我的情况是请求用户选择本地工作目录。

感谢您的温和帮助

1 个答案:

答案 0 :(得分:2)

首先,创建.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 脚本可能很有用。在这个脚本中,您将能够:

我。让用户选择工作目录,

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)]]
})