R Shiny: Аблайн не появляется в поле - PullRequest
0 голосов
/ 02 февраля 2019

Я разрабатываю блестящее приложение, в котором некоторые входные данные пользователя (которые сохраняются в информационном фрейме) используются для рисования линии на блокпосте с несколькими блоками (с использованием аблайна).

Не былопроблема на первом этапе развития.Все это выглядит красиво.

Суть в том, что из-за многочисленных потенциальных ящиков в приложении я прошу пользователя выбрать, какие ящики он хочет видеть для более дружественного интерфейса.

Так какЯ реализовал опцию выбора, похоже, у R проблемы с командой "abline".

В приведенном ниже коде вы можете увидеть два подхода, которые я использовал:

  • abline(h = UserData$X, col = "red") Что привело к следующему сообщению об ошибке: Warning: Error in $: object of type 'closure' is not subsettable [No stack trace available], которое, к сожалению, я не могу расшифровать.
  • abline(h = input$Num_B, col = "red") Что мне не нравится, потому что он не использует утвержденный кадр данныхпользователем.Здесь нет сообщения об ошибке, но нет и строки.

Есть идеи по решению этой проблемы?

Большое спасибо и хорошего дня всем!

Мой упрощенный коддля вашего использования:

library(shiny)

#UI:
# 1* 2 numeric input from user (Num_A & Num_B) which will be use as a line across the boxplots
# 2* Navbarmenu with 1 tab (for a simpler reading) where the user can chose to display one of 2 boxplots
#    -> The boxplot are there but not the line defined by the input

#Server
# 1* Get the main database file from the computer and order the box plot for further use
# 2* Collect user's inputs in a dataframe
# 3* Construction of the plots

ui <- fluidPage(
############################## 1
  navbarPage(title = "App title",
             tabPanel("User's input tab",
                      titlePanel("Input from user"),
                      sidebarLayout(
                        sidebarPanel("Fancy sidebar"
                                     ),
                        mainPanel(
                        numericInput("Num_A","1rst user input", value = 1, min=0),
                        numericInput("Num_B","2nd user input", value = 1, min=0),
                        actionButton(inputId = "UserValid",label = "User says go!"),
                        )#end mainpanel
            )#end sidebarlayour
            )#end second tab,
############################## 2
              navbarMenu(title = "Menu tab",
                tabPanel("Graph panel",
                titlePanel("Boxplot"),
                sidebarLayout(
                  sidebarPanel(
                    selectInput("graph", "Choose a graph to view:", 
                                choices = c("Plot1", "Plot2")),
                      actionButton(inputId = "BamUpdate", label = "Update")
                    ),#end sidebarpanel
                  mainPanel(
                    plotOutput("selected_graph")
                    )#end mainpan
                  )#end sidebarlayout BaM
                )#end tabPanel BaM
              )#end navbarMenu
)#end Navbarpage
)#end ui


server <- function(input, output) {
############################## 1
  DB1 <- read.csv2("~/Documents/Cours/Memoire/DT_2.0/ShinyDT/Main/DB1_Comp.csv", row.names = 1, sep=",", dec=".")
  DB1$GRP<-factor(DB1$GRP, levels=c("PmPte+","PmPte-","ItEte+","ItEte-","Tm"))
############################## 2
  UserData <- eventReactive(input$UserValid,{
    data.frame(X=input$Num_A,Y=input$Num_B) 
  })
############################## 3
  plot1 <- eventReactive(input$BamUpdate,{
    boxplot(DB1$SBL~DB1$GRP, main="Plot 1 title", col=c("gray24","green","orangered","blue","saddlebrown"),ylab="Unit",cex.lab=1.2,cex.axis=1.2)
    abline(h = UserData$X, col = "red")
  })
  plot2 <- eventReactive(input$BamUpdate,{
    boxplot(DB1$SSS~DB1$GRP, main="Plot 2 title", col=c("gray24","green","orangered","blue","saddlebrown"),ylab="Unit",cex.lab=1.2,cex.axis=1.2) 
    abline(h = input$Num_B, col = "red")
  })
  graphInput <- eventReactive(input$BamUpdate,{
    switch(input$graph,
           "Plot1" = plot1(),
           "Plot2" = plot2()
    )
  })
  output$selected_graph <- renderPlot({ 
    graphInput()
  })
}#end server


shinyApp(ui = ui, server = server)
...