我正在开发一个非常简单的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())]]
})
})
此外,如果有人知道检索氨基酸全名的简单方法,而不仅仅是单字母符号,那将会有所帮助。欢迎任何其他建议。
答案 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)
它工作的屏幕截图: