Хобрук: Ваш путь к мастерству в программировании

Ошибка ввода файла в приложении Shiny

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

Пример набора данных (csv), который работает при вводе:

category
action

Пример набора данных (csv), который не работает при вводе:

category
action
noir 

Error: replacement has 1 row, data has 0

Ниже мой пользовательский интерфейс и сервер. Полностью воспроизводимый набор.

Это работает, когда я просто ввожу категорию: «действие», но когда я ввожу категории: «действие» и «нуар» в одном столбце csv, возникает ошибка.

сервер:

library(shiny)
library(readr)
library(dplyr)

actor <- c('Matt Damon','George Clooney','Brad Pitt', 'Clive Owen', 'Morgan Freeman', 'Edward Norton', 'Adrian Granier')
category<-c('action', 'action', 'noir', 'action', 'thriller', 'noir', 'action')
movie <- c('Oceans Eleven', 'Oceans Twelve', 'Fight Club', 'Children of Men', 'The Shawshank Redemption', 'American History X', 'Entourage')
movies <- c(21, 23, 26, 12, 90, 14, 1)
cost <- c(210000, 2300000, 260000, 120000, 90000, 140000, 10000)
Type <- c('A','B','C', 'A', 'B', 'C', 'A')

moviedata<-data.frame(actor, category, movie, movies, cost, Type)

shinyServer(function(input,output){
  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    read_csv(file=file1$datapath)

  })
  output$sum <- renderTable({
    if(is.null(data())){return ()}
    test<-subset(moviedata, category %in% data())
    test1<-filter(test, `Type`==input$file4)
    test1$`BUDGET`<-input$file5
    test1$CHECKING<-ifelse(test1$`BUDGET`>test1$cost,"YES", "NO")
    filter(test1, CHECKING=="YES")
  })

  output$tb <- renderUI({
    if(is.null(data()))
      h5("Powered by", tags$img(src='optimatic.png'))
    else
      tabsetPanel(tabPanel("Summary", tableOutput("sum")))
  })

} 
)

ui

library(shiny)
shinyUI(fluidPage(
  titlePanel("Actor Finder"),
  sidebarLayout(
    sidebarPanel(
      fileInput("file","Upload Category List: Must have category as header"),
      selectInput("file4", "Select Type", c("A" = "A",
                                            "B" = "B",
                                            "C" = "C"), selected = "A"),
      numericInput("file5", "Choose cost", 1000000000),
      tags$hr()),    
    mainPanel(
      uiOutput("tb")
    )

  )
 ))
10.02.2017

Ответы:


1

Поскольку вы читаете свой CSV-файл с помощью readr, это tbl_df data.frame, который, в отличие от base data.frame, не упрощается до вектора, когда он содержит один столбец.

Сравнивать:

> c(1,2) %in% tibble(a=c(1,2))[,1]
[1] FALSE FALSE
> c(1,2) %in% tibble(a=c(1,2))[[1]]
[1] TRUE TRUE
> c(1,2) %in% data.frame(a=c(1,2))[,1]
[1] TRUE TRUE
> c(1,2) %in% data.frame(a=c(1,2))[[1]]
[1] TRUE TRUE

Вы можете использовать этот синтаксис, чтобы взять только первый столбец:

category %in% data()[[1]]
10.02.2017
  • Я задал аналогичный вопрос, изменив формат на таблицу данных и добавив кнопку загрузки. Если вы больше знаете об этой теме, я был бы очень признателен за помощь в этом вопросе, который я опубликовал пару недель назад, на который я до сих пор не нашел ответа: stackoverflow.com/questions/41939805/ 10.02.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..