Разрешение нескольких чисел в одном numericInput в блестящем - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь, чтобы пользователи указывали переменные разрывы в качестве входных данных для ввода в cut функцию

Для фиксированных разрывов приведенный ниже код работает, принимая один числовой ввод и разрезая столбец на кускиуказанная ширина.Однако я хочу, чтобы это было переменным, чтобы можно было выбрать любое количество разрывов.Ниже мой блестящий код.


ui <- fluidPage(
  numericInput("breaks", "Breaks:", 5, min = 1, max = 100),
  dataTableOutput("data")
)
server <- function(input, output) {
  data <- reactive({
    data <- data.frame(A = seq(1:100))
    data$Result <- cut(data$A, breaks = c(0, 5, 8, 15, 100))
    data$Result2 <- cut(data$A, breaks = seq(0, 100, by = input$breaks))
    data
  })

 output$data <- renderDataTable(data())
}
shinyApp(ui, server)

Какой самый простой способ заставить пользователей вводить переменные разрывы (например, 0,5,8,15,100 в моем примере кода) и предоставлять то же самое для функции вырезания, чтобы получить новый столбец, похожий на мойСтолбец результата?

1 Ответ

1 голос
/ 10 апреля 2019

Это полностью зависит от вашего творчества и чистого вопроса решения проблем. Существуют буквально сотни способов решить эту проблему.

Ниже приведено одно решение, позволяющее вставлять значения через запятую для определения разрывов.

Но вы также можете посмотреть на создание динамического числа числовых входов.

library(shiny)

ui <- fluidPage(
  textInput("breaks", "Breaks", placeholder = "Enter values separated by a comma..."),
  textOutput("breakresult"),
  dataTableOutput("data")
)
server <- function(input, output) {
  data <- reactive({
    nums <- extract(input$breaks)

    data <- data.frame(A = seq(1:100))
    data$Result <- cut(data$A, breaks = c(0, 5, 8, 15, 100))

    if (!anyNA(nums) && length(nums) >= 2) {
      data$Result2 <- cut(data$A, breaks = nums)
    }

    data
  })

  extract <- function(text) {
    text <- gsub(" ", "", text)
    split <- strsplit(text, ",", fixed = FALSE)[[1]]
    as.numeric(split)
  }

  output$breakresult <- renderText({

    nums <- extract(input$breaks)

    if (anyNA(nums)) {
      "Invalid input"
    } else {
      paste(c("Breaks:", paste(nums, collapse = ", ")), collapse = " ")
    }
  })

  output$data <- renderDataTable(data())
}
shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...