You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
3.3 KiB

1 year ago
  1. library(shiny)
  2. library(seqRFLP)
  3. library(reversetranslate)
  4. # Define UI
  5. ui <- fluidPage(
  6. # Application title
  7. titlePanel("Reverse translation"),
  8. navbarPage("Apps",
  9. tabPanel("Translation",
  10. sidebarPanel(
  11. fileInput("file1", "Upload file (fasta, csv or xlsx)", multiple = FALSE),
  12. selectInput("spec", label = h3("Specie"),
  13. choices = list("Human" = 1, "E. Coli" = 2),
  14. selected = 1),
  15. actionButton("but_an", "Analize"),
  16. selectInput("for_output", label = h3("Output Format"),
  17. choices = list("fasta" = 1, "tabla" = 2),
  18. selected = 1),
  19. ),
  20. mainPanel(
  21. textAreaInput("seqText", label="Enter mFasta text", width = "100%", height = "500px", value=""),
  22. uiOutput("seqDNAui")
  23. )
  24. ),
  25. tabPanel("Codon Frequency Table",
  26. mainPanel(
  27. tableOutput("tbl")
  28. )
  29. )
  30. )
  31. )
  32. # Define server
  33. server <- function(input, output) {
  34. obj<-reactiveValues()
  35. obj$fasta<-NULL
  36. obj$seqs<-NULL
  37. obj$names<-NULL
  38. observe({
  39. if (!is.null(input$file1)){ # This ensures that the reading is only tried when File selected
  40. if (grepl(".xlsx", input$file1$datapath)){
  41. file<-openxlsx::read.xlsx(input$file1$datapath)
  42. obj$fasta<-dataframe2fas(file)
  43. }else{
  44. if (grepl(".csv", input$file1$datapath)){
  45. file<-read.csv(input$file1$datapath)
  46. obj$fasta<-dataframe2fas(file)
  47. }else{
  48. obj$fasta<-read.fasta(input$file1$datapath)
  49. }
  50. }
  51. }
  52. })
  53. revtrans<-eventReactive(input$but_an, {
  54. if (input$seqText != "" | !is.null(obj$fasta)){
  55. if (input$seqText == ""){
  56. seqs<-obj$fasta
  57. }else{
  58. seqs<-strsplit(input$seqText,"\n")[[1]]
  59. }
  60. names_seqs<-seqs[grepl("^>",seqs)]
  61. names_seqs<-gsub(">","", names_seqs)
  62. seqs<-seqs[!grepl("^>", seqs)]
  63. if(input$spec == 1){spec<-hsapien_tbl}
  64. if(input$spec == 2){spec<-ecoli_tbl}
  65. seqs_DNA<-c()
  66. progress <- shiny::Progress$new(min=0, max=length(seqs))
  67. for (i in 1:length(seqs)){
  68. set.seed(123)
  69. seqs_DNA<-c(seqs_DNA, reverse_translate(seqs[i],spec))
  70. progress$set(message = "Reverse Translating", value = i)
  71. }
  72. progress$close()
  73. obj$seqs<-seqs_DNA
  74. obj$names<-names_seqs
  75. }
  76. })
  77. output$seqDNA <- renderText({
  78. print(1)
  79. observeEvent(input$but_an, {revtrans()})
  80. if (!is.null(obj$seqs)){
  81. paste(dataframe2fas(data.frame(names=obj$names, seqs=obj$seqs)), collapse="<br>")
  82. }
  83. })
  84. output$seqDNAt <- renderTable({
  85. print(2)
  86. observeEvent(input$but_an, {revtrans()})
  87. if (!is.null(obj$seqs)){
  88. data.frame("Name"=obj$names, "Seqs"=obj$seqs)
  89. }
  90. })
  91. {
  92. output$tbl <- renderTable({
  93. if(input$spec == 1){spec<-hsapien_tbl}
  94. if(input$spec == 2){spec<-ecoli_tbl}
  95. spec[order(spec$aa),]
  96. })
  97. }
  98. output$seqDNAui<-renderUI({
  99. observeEvent(input$but_an, {})
  100. if (input$for_output == 1){
  101. htmlOutput("seqDNA")
  102. }else{
  103. tableOutput("seqDNAt")
  104. }
  105. })
  106. }
  107. # Run the application
  108. shinyApp(ui = ui, server = server)