R 允许在一个数字输入中输入多个数字

R 允许在一个数字输入中输入多个数字,r,shiny,R,Shiny,我试图让用户指定变量中断作为输入,以提供给cut函数 对于固定分隔符,下面的代码通过接受一个数字输入并将列切割成指定宽度的块来工作。然而,我希望这是可变的,这样人们可以选择任意数量的中断。下面是我的代码 ui <- fluidPage( numericInput("breaks", "Breaks:", 5, min = 1, max = 100), dataTableOutput("data") ) server <- function(input, output) {

我试图让用户指定变量中断作为输入,以提供给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,15100)并将其提供给cut函数以获得类似于结果列的新列,哪种方法最简单?

这完全取决于您的创造力和纯粹的问题解决。可以有数百种方法来解决这个问题

下面是一个解决方案,允许您插入逗号分隔的值来定义分隔符

但您也可以考虑创建动态数量的数字输入

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)