2016-08-15 11 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 개의 값을 표시하는 출력을 반환하도록 코드를 수정하도록 도와주십시오. 노동자의

민은 : 완료 시간 : XXX XXXX

첫 번째 문제는 당신 dat 함수가 값을 기준으로 데이터 프레임을 필터링되어 있지만 selectInput 선택을하지 않는 임의의 인덱스에 연결되는 것 같다

답변

1

원래 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

Thanks T.J :) 앱이 이제는 제대로 작동하며 디버깅 팁 문서가 매우 멋지다. –

+0

@ KanchanSonthalia 위대한 분! 이 경우이 대답의 왼쪽에있는 녹색 체크 표시를 클릭하여 동의를하면 평판 포인트를 얻습니다. – Teajay

관련 문제