【问题标题】:Shiny app: Warning: Error in data.frame: arguments imply differing number of rows: 2, 0闪亮的应用程序:警告:data.frame 中的错误:参数暗示不同的行数:2、0
【发布时间】:2016-08-15 19:20:33
【问题描述】:
#install.packages("shinythemes")
#install.packages("shinyjs")
install.packages("DT")
install.packages("reshape2")

library(shiny)
library(shinythemes)
library(shinyjs)
library(DT)
library(reshape2)

data <- read.csv("C:/Users/Kanchan/Desktop/timeforcompletion.csv")


server <- function(input, output, session) {

  dat <- reactive ({

    row1 <- row.names (data[data$Chromosomes == input$select & 
                              data$Data.per.chromosomes == input$select1 &
                              data$CPU.worker == input$select2,])
    row1 <- as.numeric(row1)
    out1 <- data$Num.of.workers[row1]
    out2 <- data$Time.to.complete..Mins.[row1]



    val <- data.frame(Name = c("Num of workers","Time.to.complete..Mins." ), Value = c(out1,out2)
                      ,stringsAsFactors = FALSE)
    #require(reshape2)
    #melt(val)
    return(val)

  })

  output$mytable <- DT::renderDataTable(dat())


}


ui <- fluidPage( theme = shinytheme("cosmo"),
                 shinyjs::inlineCSS(list(body = "color:DarkBlue")),
                 titlePanel("WQ-MAKER"),

                 sidebarLayout(

                   sidebarPanel(
                     "Sidebar"
                   ), #endsidebarpanel

                   mainPanel(

                     selectInput("select", label = h3("Chromosomes"), 
                                 choices = list("12" = 1, "24" = 2), 
                                 selected = 1),
                     selectInput("select1", label = h3("Data per chromosomes"), 
                                 choices = list("100000" = 1, "200000" = 2, "1000000" = 3), 
                                 selected = 1),
                     selectInput("select2", label = h3("CPU per worker"), 
                                 choices = list("4" = 1), 
                                 selected = 1),
                     #textOutput("text1")
                     hr(),
                     DT::dataTableOutput("mytable")

                   )#end mainpanel
                 )# end sidebarlayout
)



shinyApp(ui = ui, server = server)

输入数据集如下所示:

Chromosomes Data per chromosomes    CPU/worker  Num of workers  Time to complete (Mins)          
12          100000                  4           3               16.8333
24          100000                  4           3               23.4167
12          200000                  4           3               23.1333
12          1000000                 4           3               54.7667
12          1000000                 4           7               17.5444

我知道问题出在 output$mytable 上。请帮我纠正代码以返回显示 2 个值的输出。

工人人数:xxx 完成时间:xxxx

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    第一个问题似乎是您的dat 函数正在按值过滤数据帧,但您的selectInput 选择与原始data 没有任何意义的任意索引相关联。丢失= 1= 2 等,应用程序几乎可以运行。

                     selectInput("select", label = h3("Chromosomes"), 
                                 choices = list("12", "24"), 
                                 selected = 1),
                     selectInput("select1", label = h3("Data per chromosomes"), 
                                 choices = list("100000", "200000", "1000000"), 
                                 selected = 1),
                     selectInput("select2", label = h3("CPU per worker"), 
                                 choices = list("4"), 
                                 selected = 1),
    

    接下来你需要dat函数在没有返回数据值的情况下返回NULL。

        if (length(row1)==0)
          return(NULL)
    

    现在您应该看到一个打印有值的数据框,但此时您可能需要调整输出以使其看起来更像您最初想要的。如果没有符合选择标准的值,您可能还希望应用程序打印一条友好消息。两者都留给读者作为练习。 :)

    【讨论】:

    • 顺便说一句,这是一篇关于调试 Shiny 应用程序的好文章。仅供参考,我使用普通的旧cat() 来调试这个。 shiny.rstudio.com/articles/debugging.html
    • 感谢 T.J :) 应用程序现在运行良好,调试技巧文章也很酷。
    • @KanchanSonthalia 太棒了!在这种情况下,请单击此答案左侧的绿色复选标记接受它,我们都会获得声誉积分。
    猜你喜欢
    • 2021-11-25
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多