R блестящий чтение конкретного файла CSV на основе условного ввода с использованием реактивного - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь создать блестящее приложение, которое берет файл csv и извлекает из него конкретную информацию. Когда я загружаю один файл и запускаю мой код в порядке. Но теперь я хочу, чтобы пользователь мог выбирать, какой CSV-файл анализировать, потому что каждый из них содержит разные книги. Вот код, который у меня есть до сих пор

library("shiny")
library("tidyverse")
library("stringr")

## Define UI
ui <- fluidPage( 

    titlePanel("Find words in the text"),

  ## Sidebar panel
    sidebarLayout(
        sidebarPanel(

             ## Textual input
            selectInput("source", "Choose Text",
                         choices = c("Book 1" = 1,
                                     "Book 2" = 2),
                         selected = "Book 1"),

            textInput("word", "Insert words", value = ""),

            helpText("Type the word or words (separated by comma)\n
                  that you would like to find"),
            submitButton(text = "Search", icon("refresh")),
            br(), 

            textOutput("text")
        ),

        ## Main panel for outputs
        mainPanel(            
            tabsetPanel(
                tabPanel("Main",
                         tableOutput("view")),
                tabPanel("Summary",
                         tableOutput("summary"))
            )
        )
    )
)

server <- function(input, output) {

    k <- reactive({
             k <- ifelse(input$source == 1,
                              read_delim("book1.csv", delim = ";"),
                              read_delim("book2.csv", delim = ";"))
    })

    output$view <- renderTable({
        k %>%
            filter(str_detect(text,
                              str_split(input$word, ",")[[1]]))
    })

    output$text <- renderText({
        palabras <- str_split(input$word, ",")[[1]]
        n.times <- select(k, text) %>%
            str_count(c(palabras))
        paste("The word ", c(palabras),
              " appeared: ", n.times, " times")
    })


    output$summary <- renderTable({
        p <- str_replace_all(input$word, ",", "|")
        k %>%
            extract(col = text,
                    into = "Keyword",
                    regex = str_c("(",p, ")"),
                    remove = T, convert = T) %>%
            na.omit()
    })
}

## Create Shiny app
shinyApp(ui = ui, server = server)

Я также попытался изменить часть, начинающуюся с k <- reactive({ (где k - это тиббл, где я хочу получить свою книгу), на что-то, где ясначала загрузите каждую книгу, а затем я просто отправляю ее на k, например

book1 <- read_delim("book1.csv", delim = ";")
book2 <- read_delim("book2.csv", delim = ";")

k <- reactive ({
         k <- ifelse(input$source == 1,
                     book1,
                     nook2)
              })

Я пытался пару дней использовать учебные пособия и stackoverflow, но я не могу найти то, что мне действительно подходит,Я пробовал несколько разных способов, но, видимо, я что-то не так с функцией reactive. Я был бы очень благодарен, если бы кто-нибудь мог помочь мне решить эту проблему и объяснить мою ошибку, поскольку это мое первое блестящее приложение.

Только для записи : Если я удалю все, что связано сreactive часть и только загрузить файл в k с чем-то вроде k <- read_delim("book1.csv", delim = ";"), тогда мое приложение отлично работает для подсчета слов.

...