【问题标题】:File Input Error in Shiny AppShiny App中的文件输入错误
【发布时间】:2017-02-10 00:43:03
【问题描述】:

我正在制作一个需要数据集输入的闪亮应用程序。我可以让它与数据集中的一个值一起工作,但是当我上传多个值时,会出现一条错误消息:

输入时工作的示例数据集 (csv):

category
action

输入时不起作用的示例数据集(csv):

category
action
noir 

Error: replacement has 1 row, data has 0

下面是我的用户界面和服务器。完全可重复的设置。

当我只输入类别:“action”时它可以工作,但是当我在一个 csv 列中输入类别:“action”和“noir”时,就会出现错误。

服务器:

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")
    )

  )
 ))

【问题讨论】:

    标签: r dplyr shiny


    【解决方案1】:

    因为您使用 readr 读取 csv 文件,所以它是一个 tbl_df 数据帧,与基本 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]]
    

    【讨论】:

    • 我问了一个与此类似的问题,将格式更改为数据表并添加了下载按钮。如果您对这个主题有更多了解,我非常感谢我几周前发布的这个问题的帮助,但我仍然没有找到答案:stackoverflow.com/questions/41939805/…
    猜你喜欢
    • 2018-01-20
    • 2014-10-07
    • 1970-01-01
    • 2018-03-16
    • 2014-07-16
    • 1970-01-01
    • 2016-03-10
    • 2020-10-21
    • 2018-09-21
    相关资源
    最近更新 更多