2016-08-15 14 views
0
#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) 

を入力データセットは、次のようになります。シャイニーアプリ:警告:data.frame中のエラー:引数は、行の異なる数を意味するもの:2、0

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 

私は問題は出力$であることを理解mytable。 2つの値を表示する出力を返すようにコードを修正してください。労働者の

のNum:完了までのXXX 時間:xxxxの

答えて

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

次はあなたには、データ値が返されない場合はNULLを返すようにdat機能を必要としています。

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

今、あなたは値で印刷されたデータフレームが表示されるはずですが、この時点で、あなたはおそらくより多くのあなたが最初に何を望むかのように見えるために出力を微調整する必要があります。また、選択基準に一致する値がない場合は、友好的なメッセージを印刷することもできます。どちらも読者に運動として残されています。 :)

+0

ここに、シャイニーのアプリをデバッグするのに良い記事があります。参考までに、私は普通の 'cat()'を使ってこれをデバッグしました。 http://shiny.rstudio.com/articles/debugging.html – Teajay

+0

ありがとうT.J :)アプリはうまく動いていて、デバッグのヒントの記事はかなりクールです。 –

+0

@KanchanSonthalia素晴らしい!その場合は、この回答の左側にある緑色のチェックマークをクリックしてください。それを受け入れるには、評判ポイントを取得してください。 – Teajay

関連する問題