Shiny textInput函数是否适用于数字数据输入?

时间:2018-02-02 06:26:00

标签: r shiny

我正在学习Shiny并希望运行以下基本功能。该函数只是标识在其第一个(也是唯一的)参数中指定的对象的类。

check_data_type = function(sample_variable) {
  type = class(sample_variable)
  if (type=='numeric') {
    print("Data type is numeric")
    output = 1
  } else {
    print(paste0('Data type is ', type))
    output = 2
  }
  return(output)
}

我想通过textInput函数在Shiny中指定参数,如下所示:

library(shiny)

ui <- fluidPage(
  textInput(inputId = "keystroke_input", label = "Enter one keystroke here", 
value = NULL),
  textOutput(outputId = "keystoke_class"),
  actionButton("go","Run Function")
)

server <- function(input, output) {
  observeEvent(input$go,
  output$keystoke_class <- renderText({
    check_data_type(input$keystroke_input)
  })
  )
}

shinyApp(ui = ui, server = server)

但是,当通过Shiny UI指定check_data_type程序时,程序总是将我通过textInput字段输入的值分类为&#34;字符。&#34;

textInput函数,正如其名称所暗示的那样,似乎是自动将它收到的任何值分类为&#34; character&#34;在check_data_type函数评估之前。

我认为这是正在发生的事情,因为如果相反我尝试在Shiny中运行以下简单的算术函数...

square_the_number = function(sample_Variable) {
  return(sample_variable^2)
}

...我需要首先通过as.numeric()函数将通过textInput函数输入的值转换为数值。为了说明,当我在Shiny服务器功能中调用上述功能时(参见下面的方框中的倒数第二行),程序正确执行。否则它将返回&#34;错误:二元运算符的非数字参数。&#34;

ui <- fluidPage(
  textInput(inputId = "keystroke_input", label = "Enter one keystroke here", 
value = NULL),
  textOutput(outputId = "keystoke_class"),
  actionButton("go","Run Function")
)

server <- function(input, output) {
  observeEvent(input$go,
  output$keystoke_class <- renderText({
    square_the_number(as.numeric(input$keystroke_input))
  })
 )
}

shinyApp(ui = ui, server = server)

有没有办法让textInput函数与类无关,以便通过前面提到的check_data_type函数正确地对数值进行分类?

我考虑过numericInput函数,但这会强制您指定一个下拉菜单,并且我希望保持输入字段的开放性。

2 个答案:

答案 0 :(得分:1)

numericInput()正是您要找的。

ui <- fluidPage(
  numericInput(inputId = "keystroke_input", label = "Enter one keystroke here", 
            value = NULL),
  textOutput(outputId = "keystoke_class"),
  actionButton("go","Run Function")
)

server <- function(input, output) {


  observeEvent(input$go,
               output$keystoke_class <- renderText({
                 (input$keystroke_input)^2
               })
  )
}

shinyApp(ui = ui, server = server)

答案 1 :(得分:0)

在R闪亮中,我们有几种选择来提供输入。我们也有数字输入选项。检查显示所有可用选项的链接。还提供了每个代码。 http://shiny.rstudio.com/gallery/widget-gallery.html

如果您不熟悉闪亮,可以通过本教程学习 https://shiny.rstudio.com/tutorial/