如何验证闪亮的用户输入

时间:2017-03-29 06:05:17

标签: r shiny user-input

我正在开发一个非常简单的Shiny app,它接收DNA密码子并返回相应的氨基酸。我的问题是我要验证用户输入,以便它只能接受3个字母(单个密码子),必须是大写字母,并且只接受DNA碱基(A,C,T或G)。我看过Shiny's validation article,但一直遇到错误。 这是我到目前为止的代码:

ui.R

library(shiny)
library(shinythemes)

shinyUI(fluidPage(

  theme = shinytheme("slate"),

  # Application title
  titlePanel("Codon lookup"),

  # 
  sidebarLayout(
    sidebarPanel(
      textInput(
        inputId = "codon",
        label = "Enter a codon",
        value = ""),
      actionButton(inputId = "go", label = "Search")
    ),

    # 
    mainPanel(
      verbatimTextOutput("aminoacid")
    )
  )
))

server.R

library(shiny)
library(Biostrings)

shinyServer(function(input, output) {

  data <- eventReactive(input$go, {

    #validate somehow
      input$codon


  })


  output$aminoacid <- renderText({

    GENETIC_CODE[[as.character(data())]]

  })

})

此外,如果有人知道检索氨基酸全名的简单方法,而不仅仅是单字母符号,那将会有所帮助。欢迎任何其他建议。

1 个答案:

答案 0 :(得分:1)

由于您没有在那里使用GENETIC_CODE,因此在这种情况下,反应不是真正适合进行验证的地方。所以我把它移到renderText输出节点。如果您有reactive进行查找,则可以在那里进行查找。

我查看了GENETIC_CODE,无论如何,将其作为下拉列表更有意义并将其用作验证。所以我继续使用renderUI在其中放置一个selectInput,因为如果你通常在服务器中创建输入控件,你会有更大的灵活性。

我还将Search按钮移动到密码子选择控件上方,因为它被选择所掩盖。

library(shiny)
library(shinythemes)

u <- shinyUI(fluidPage(

  theme = shinytheme("slate"),

  # Application title
  titlePanel("Codon lookup"),

  # 
  sidebarLayout(
    sidebarPanel(
      actionButton(inputId = "go", label = "Search"),
      uiOutput("codonselection")
    ),

    # 
    mainPanel(
      verbatimTextOutput("aminoacid")
    )
  )
))

library(Biostrings)

s <- shinyServer(function(input, output) {

  data <- eventReactive(input$go, {
    input$codon
  })
  output$codonselection <- renderUI({
    choices <- names(GENETIC_CODE)
    default <- "TTC"
    selectInput("codon",label="Select Codon",choices=choices,selected=default)
  })

  output$aminoacid <- renderText({
    lookupcodon <-as.character(data())
    if (lookupcodon %in% names(GENETIC_CODE)){
      return(GENETIC_CODE[[ lookupcodon  ]])
    } else {
      return("Name not in GENETIC_CODE")
    }
  })

})
shinyApp(u,s)

它工作的屏幕截图:

enter image description here