Shiny R «ОШИБКА: не числовой c аргумент для бинарного оператора» при попытке передать переменную с сервера на пользовательский интерфейс - PullRequest
0 голосов
/ 20 апреля 2020

Очевидно, что я делаю что-то не так или недостаточно. Мне нужно установить min, max и value для sliderInput, используя один столбец из данных .xlsx, которые я загружаю.

UI

ui <- dashboardPage(
  dashboardHeader(title = "test"),
  dashboardSidebar(sidebarMenu(
    sliderInput(
      "man",
      "Time Interval",
      min = min("time"),
      max = max("time"),
      value = c(min("time"), max("time"))
    )

  )),
  dashboardBody(
    wellPanel(
      fileInput("file", "Choose XLSX File"),
      downloadButton("downloadReport", "Generate Report")
    ),
    textOutput("time"),
    box(
      title = "Position",
      width = "100%",
      plotOutput("plot1", height = 450)
    )
  )

)

СЕРВЕР

server <- function(input, output) {
  my_data <- reactive({
    inFile <- input$file
    if (is.null(inFile))
      return(NULL)
    dataRaw <- read.xlsx(inFile$datapath)

  })
  output$plot1 <- renderPlot({
    if (is.null(my_data()))
      return(NULL)
    str(my_data())
    plot(my_data()$Position.X,
         my_data()$Position.Y,
         xlab = "Distance (X)",
         ylab = "Distance (Y)")

  })

  output$time <- reactive({
    if (is.null(my_data()))
      return(0)
    my_data()$Time

  })

}

ФАЙЛЫ https://drive.google.com/drive/folders/1wObfHrFz2hMg3M5xfANzCuHwvpc6wKbi?usp=sharing

ОШИБКА

ОШИБКА: не числовой c аргумент бинарного оператора

Ошибка происходит в строках

min = min("time"),
max = max("time"),
value = c(min("time"), max("time"))

но строка

textOutput("time"),

получает переменную time.

Я поделился файлами и входными данными. Спасибо!

1 Ответ

0 голосов
/ 20 апреля 2020

Решено, используя renderUI, как в Получите минимальный максимум sliderInput в блестящем

В моем коде ui.R я заменил часть sliderInput(...) на uiOutput("slider") и на сервере .R заменил output$time <- reactive({...}) деталь на:

  output$slider <- renderUI({
    if (is.null(my_data()))
      sliderInput("slider",
                  "",
                  min   = 0,
                  max   = 0,
                  value = c(0, 0))
    maxkaw <- max(my_data()$Time)
    minkaw <-  min(my_data()$Time)

    sliderInput(
      "slider",
      "Min-Max",
      min   = minkaw,
      max   = maxkaw,
      value = c(minkaw, maxkaw)
    )
  })
...