Ошибка: аргумент «expr» отсутствует, по умолчанию отсутствует

#r #shiny

Вопрос:

Поэтому я пытаюсь создать панель мониторинга в R, где на первой вкладке пользователи могут вводить свои данные в csv-файл. А во второй вкладке они увидят сводку и график своих данных. На вкладке «График» пользователи должны будут выбрать xlabel и ylabel из столбцов набора данных, а на графике A будет показана точечная диаграмма метки xlabel и y.

 ui <- dashboardPage(skin='red',
  dashboardHeader(title = "Dashboard"),
  ## Sidebar content
  dashboardSidebar(
    sidebarMenu(
      menuItem("Data", tabName = "dashboard"), 
      menuItem("Visualization", tabName = "viz",
               menuSubItem("Summary",tabName="sum"),
               menuSubItem("Plot",tabName = "plot")),
      menuItem("Interpretation", tabName = "int")
    ) ),
  ## Body content
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              fluidPage(titlePanel("DATA"),
                        fluidRow(
                          column(width=4,
                                 fileInput("file1", "Input CSV file",
                                           multiple = TRUE,
                                           accept = c("text/csv",
                                                      "text/comma-separated-values,text/plain",
                                                      ".csv"))),
                          column(width=2,checkboxInput("header", "Header", TRUE)),
                          column(width=2,radioButtons("sep","Separator",
                                              choices = c(Comma=",",
                                                          Semicolon = ";",
                                                          Tab = "t"),
                                              selected = ",")),
                          column(width=2,radioButtons("quote", "Quote",
                                              choices = c(None = "",
                                                          "Double Quote" = '"',
                                                          "Single Quote" = "'"),
                                              selected = '"')),
                          column(width=2,radioButtons("disp", "Display",
                                              choices = c(Head = "head",
                                                          All = "all"),
                                              selected = "head"))
                          ),
                        tableOutput("contents")
      )),
      # Second tab content
      tabItem(tabName = "sum",
              box(
                title="Summary",
                status="primary",
                solidHeader = TRUE,
                width = "100%",
                collapsible = TRUE,
                verbatimTextOutput("summary")  
              )
              ),
      tabItem(tabName="plot",
              h2("Plot"),
              fluidRow(
                selectInput("sip","select",choices = 1:10),
                selectInput("sila","anda",choices = 1:10)
              ),
              fluidRow(
                box(
                  title = "Plot A",
                  status= "primary",
                  solidHeader = TRUE,
                  collapsible = TRUE,
                  plotOutput("plota",height="300px")
                ),
                box(
                  title = "Plot B",
                  status= "primary",
                  solidHeader = TRUE,
                  collapsible = TRUE,
                  plotOutput("plotb",height="300px"
                )
              )
        
      )),
      tabItem(tabName = "int",
              h2("hello")
              )
      )
  ))


server <- function(input, output,session) {
  output$contents <- renderTable({
    
    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.
    
    req(input$file1)
    
    df <- read.csv(input$file1$datapath,
                   header = input$header,
                   sep = input$sep,
                   quote = input$quote)
    
    if(input$disp == "head") {
      return(head(df))
    }
    else {
      return(df)
    }
  })
  output$summary <- renderPrint({
    req(input$file1)
    dataset<- read.csv(input$file1$datapath,
                       header = input$header,
                       sep = input$sep,
                       quote = input$quote)
    summary(dataset)
    
  })
  
  
  
  output$plota <- renderPlot({
    req(input$file1)
    dataset<- read.csv(input$file1$datapath,
                       header = input$header,
                       sep = input$sep,
                       quote = input$quote)
    updateSelectInput(session,"sip",label="label",choices=names(dataset))
    updateSelectInput(session,"sila",label="label",choices = names(dataset))
    
    plot(dataset[eventReactive(input$sip)],dataset[eventReactive(input$sila)],pch=19)
          })
  
  output$plotb <- renderPlot({
    
  })
}
  

shinyApp(ui, server)
 

Вот как выглядит код. Когда я запускаю эту программу, это приводит к ошибке: аргумент «expr» отсутствует без значения по умолчанию. Что такое expr в этом контексте?

Комментарии:

1. Что вы пытаетесь сделать с eventReactive(input$sip) командой внутри вашего сюжета? Это неправильный синтаксис. Вам нужно выражение события и выражение значения. Вам не хватает выражения значения.

Ответ №1:

Вам не нужно использовать eventReactive , так renderPlot как это реактивное выражение, используйте только input$..

Другая проблема заключается в том , что вы пытаетесь обновить selectImput » ы » внутри renderPlot , что не сработает. Вы должны обновить их другим реактивным выражением, например reactive() , где вы также можете прочитать файл вместо того, чтобы читать его несколько раз. Ниже приведен ваш код, измененный для решения проблемы, а также чтение файла только один раз внутри реактивного выражения.

 library(shiny)
library(shinydashboard)
ui <- dashboardPage(skin='red',
                    dashboardHeader(title = "Dashboard"),
                    ## Sidebar content
                    dashboardSidebar(
                      sidebarMenu(
                        menuItem("Data", tabName = "dashboard"), 
                        menuItem("Visualization", tabName = "viz",
                                 menuSubItem("Summary",tabName="sum"),
                                 menuSubItem("Plot",tabName = "plot")),
                        menuItem("Interpretation", tabName = "int")
                      ) ),
                    ## Body content
                    dashboardBody(
                      tabItems(
                        # First tab content
                        tabItem(tabName = "dashboard",
                                fluidPage(titlePanel("DATA"),
                                          fluidRow(
                                            column(width=4,
                                                   fileInput("file1", "Input CSV file",
                                                             multiple = TRUE,
                                                             accept = c("text/csv",
                                                                        "text/comma-separated-values,text/plain",
                                                                        ".csv"))),
                                            column(width=2,checkboxInput("header", "Header", TRUE)),
                                            column(width=2,radioButtons("sep","Separator",
                                                                        choices = c(Comma=",",
                                                                                    Semicolon = ";",
                                                                                    Tab = "t"),
                                                                        selected = ",")),
                                            column(width=2,radioButtons("quote", "Quote",
                                                                        choices = c(None = "",
                                                                                    "Double Quote" = '"',
                                                                                    "Single Quote" = "'"),
                                                                        selected = '"')),
                                            column(width=2,radioButtons("disp", "Display",
                                                                        choices = c(Head = "head",
                                                                                    All = "all"),
                                                                        selected = "head"))
                                          ),
                                          tableOutput("contents")
                                )),
                        # Second tab content
                        tabItem(tabName = "sum",
                                box(
                                  title="Summary",
                                  status="primary",
                                  solidHeader = TRUE,
                                  width = "100%",
                                  collapsible = TRUE,
                                  verbatimTextOutput("summary")  
                                )
                        ),
                        tabItem(tabName="plot",
                                h2("Plot"),
                                fluidRow(
                                  selectInput("sip","select",choices = 1:10),
                                  selectInput("sila","anda",choices = 1:10)
                                ),
                                fluidRow(
                                  box(
                                    title = "Plot A",
                                    status= "primary",
                                    solidHeader = TRUE,
                                    collapsible = TRUE,
                                    plotOutput("plota",height="300px")
                                  ),
                                  box(
                                    title = "Plot B",
                                    status= "primary",
                                    solidHeader = TRUE,
                                    collapsible = TRUE,
                                    plotOutput("plotb",height="300px"
                                    )
                                  )
                                  
                                )),
                        tabItem(tabName = "int",
                                h2("hello")
                        )
                      )
                    ))


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


  dataset <- reactive({
    req(input$file1)
    dat <- read.csv(input$file1$datapath,
                    header = input$header,
                    sep = input$sep,
                    quote = input$quote)
    updateSelectInput(session,"sip",choices=names(dat))
    updateSelectInput(session,"sila",choices = names(dat))
    dat
  })

  output$contents <- renderTable({
    
    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.
    
    req(input$file1)
    
    df <- dataset()
    
    if(input$disp == "head") {
      return(head(df))
    }
    else {
      return(df)
    }
  })
  
  output$summary <- renderPrint({
    req(input$file1)
    summary(dataset())
    
  })
  
  output$plota <- renderPlot({
    plot(dataset()[[input$sip]],dataset()[[input$sila]],pch=19)
  })
  
  output$plotb <- renderPlot({
    
  })
}

shinyApp(ui, server)