2017-03-29 6 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") 
    ) 
) 
)) 

사람이 아미노산의 전체 이름을 검색 할 수있는 쉬운 방법을 알고있는 경우

library(shiny) 
library(Biostrings) 

shinyServer(function(input, output) { 

    data <- eventReactive(input$go, { 

    #validate somehow 
     input$codon 


    }) 


    output$aminoacid <- renderText({ 

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

    }) 

}) 

또한 server.R, , 단일 문자 표기법보다는 도움이 될 것입니다. 다른 제안 사항도 환영합니다.

+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