несколько участков в Shiny - PullRequest
0 голосов
/ 03 октября 2019

Я работаю над задачей по разработке интерактивной информационной панели с использованием Shiny, но мне удалось это сделать, однако, когда я объединил код для отображения 3 графиков, появилось 2 из них, но третий вызвал ошибку:

[: индекс за пределами [трассировка стека недоступна]

вот мой код

library(shiny)

ui=fluidPage(    

  # Give the page a title
  titlePanel("Age ranges according to program"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      actionButton(inputId = "MBA", label = "MBA"),
      actionButton(inputId = "MSLOD", label = "MSLOD"),
      actionButton(inputId = "MSQBE", label = "MSQBE"),
      selectInput("Program", "Program:",  choices=colnames(Majoraccordingtogender)),
      selectInput("Program", "Position:", choices=colnames(Majorsaccordingtoposition))



    ),

    # Create a spot for the barplot
    mainPanel(
      fluidRow(

      column(6,plotOutput("hist")), 
      column(8,plotOutput("Plot")),
      column(10,plotOutput("Plot1"))





      )

    )

  )
)




server <- function(input, output) {

  rv <- reactiveValues(data = Majorsaccordingtoage[1,1:4])

  observeEvent(input$MBA, { rv$data <- Majorsaccordingtoage[1,1:4] })
  observeEvent(input$MSLOD, { rv$data <- Majorsaccordingtoage[2,1:4] })
  observeEvent(input$MSQBE, { rv$data <- Majorsaccordingtoage[3,1:4] })

  output$hist <- renderPlot({ 

    barplot(rv$data, 
            main=input$radio,
            ylab="Number employees",
            xlab="Ages Range",col=rainbow(4))
  })
  output$Plot <- renderPlot({
    pct <- round(as.numeric(Majoraccordingtogender[,input$Program])/sum(as.numeric(Majoraccordingtogender[,input$Program]))*100)
    lbls <- paste(pct) 
    lbls <- paste(lbls,"%",sep="") 

    pie(Majoraccordingtogender[,input$Program], 
        main=input$Program,
        col=rainbow(2),
        labels = lbls)
    legend("topright", c("Male", "Female"), cex=0.8,fill=rainbow(length(Majoraccordingtogender[,input$Program])))
  })
  output$Plot1 <- renderPlot({


    barplot(Majorsaccordingtoposition[,input$Program], 
            main=input$Program,col=rainbow(3),xlab = "Programs"
    )
  })

}

shinyApp(ui = ui, server = server)

и мои наборы данных выглядят так

Majorsaccordingtoage

       0-25 25-30  30-40   40-65
MBA     5   133     258    106
MSLOD   4   59      60     28
MSQBE   2   34      64     28

Majorsaccordingtoposition

    DIRECTOR    MANAGER OFFICER NOT EMPLOYEE    NOT MENTIONED
MBA    10       67     172       104             10
MSLOD   1       17     57       22               6
MSQBE   0       15      39      13               3

Majoraccordingtogender

       MBA  MSLOD  MSQBE
Male    281   79    44
Female  221   72    84

обратите внимание, что все типы данных являются матрицами.

спасибоза помощь

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

спасибо за вашу помощь, я нашел ответ, что

output$Plot1 <- renderPlot({


    barplot(Majorsaccordingtoposition[,input$Program], 
            main=input$Program,col=rainbow(3),xlab = "Programs"
    )
  })

в программе main = inpu $ - это проблема, поэтому мне пришлось изменить «программу» мира в пользовательском интерфейсе и сервере на любое другое слово

  selectInput("Program", "Position:", choices=colnames(Majorsaccordingtoposition))

, потому что он похож на приведенный ниже код

selectInput("Program", "Program:",  choices=colnames(Majoraccordingtogender))
0 голосов
/ 03 октября 2019

Просто неуместная запятая.

Majorsaccordingtoposition[,input$Program] до Majorsaccordingtoposition[input$Program,]

  output$Plot1 <- renderPlot({


    barplot(Majorsaccordingtoposition[input$Program,], 
            main=input$Program,col=rainbow(3),xlab = "Programs"
    )
  })
...