2017-03-29 18 views
1

私はDNAコドンを取り込んで対応するアミノ酸を返すとてもシンプルなShinyアプリケーションを開発中です。私の問題は、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

私のためにすべてのフィードバック? –

+0

@MikeWiseはい申し訳ありませんが、今日は忙しいです。これは素晴らしいです!私はselectInputの使用について考えていましたが、ユーザーがシーケンス全体を入力して翻訳できるようにするために、これを今後さらに拡張したいと考えていました。素晴らしいと便利な説明、ありがとう! –

答えて

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

関連する問題