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