Как извлечь значение ползунка, выбранного пользователем в приложении shiny, чтобы использовать его в функции?

#r #shiny

#r #блестящий

Вопрос:

Итак, у меня есть это воспроизводимое приложение shiny с ползунком:

 library(bold)
library(shiny)
library(shinyWidgets)
library(stringr)
library(readr)

grades2<-function(groups){
  taxon<-bold_seqspec(taxon=groups, format = "tsv")
  taxon2<-taxon[taxon$species_name!=""|is.na(taxon$species_name),]
  taxon2<-taxon2[!(taxon2$bin_uri == "" | is.na(taxon2$bin_uri)), ]
  taxon2$base_number=str_count(taxon2$nucleotides, pattern="[A-Z]")
  taxon2<-taxon2[(taxon2$base_number>input$seqsize),]
  assign('taxon',taxon,envir=.GlobalEnv)
}


ui <- navbarPage(title=tags$h3("APP"),tabPanel(column(12,align="center",tags$h4("Download"),tags$br(),
                                                      sliderInput("seqsize", "Mininum number of base pairs for sequences in reference library:",min = 0, max = 1000, value = 500),textOutput("SliderText"),
                                 textInputAddon(inputId="taxa2",addon=icon("search"),width="500px",label=tags$h5(tags$strong("Enter the name of the taxonomic group or groups separated by commas, without spaces:")),placeholder="Example: Carnivora,Ursidae,Artiodactyla,Soricomorpha"),
                                 downloadButton("downloadData_2","Download"))))

server <- function(input, output){
  taxaInput_2 <- reactive({grades2(unlist(strsplit(input$taxa2, ",")))})
  output$downloadData_2 <- downloadHandler(
    filename = function() {
      paste(to_upper_camel_case(input$taxa2,sep_out=","), ".tsv")
    },
    content = function(file) {
      shiny::withProgress(
        value=10,
        {
          shiny::incProgress(10/10)
          write_tsv(taxaInput_2(), file)
        }
      )
    }
  )
}
shinyApp(ui=ui,server=server)
  

Я ввел ввод ползунка, но я не знаю, как извлечь значение, выбранное пользователем, чтобы использовать его в моей функции с именем «grades2». Я хочу, чтобы переменная «input $ seqsize» в этой строке кода была значением, выбранным пользователем в ползунке:

 taxon2<-taxon2[(taxon2$base_number>seqsize),]
  

Проблема в том, что я получаю следующую ошибку:

 Warning: Error in [.data.frame: object 'input' not found
  

Заранее благодарю вас за любые ответы

Комментарии:

1. Я предлагаю добавить для него аргумент в вашу функцию и включить его из реактивной части. То есть grades2<-function(groups, size) { ... ; taxon2<-taxon2[(taxon2$base_number>size),]; ... } . Затем вызовите его как reactive({grades2(unlist(strsplit(input$taxa2, ",")),input$seqsize)}) . (Извините, код в комментариях воняет.)

Ответ №1:

Я предлагаю вам переписать вашу функцию, чтобы убрать любое понятие реактивности: сделайте ее наивной по отношению к тому факту, что она работает внутри shiny .

 grades2<-function(groups, size){
  taxon<-bold_seqspec(taxon=groups, format = "tsv")
  taxon2<-taxon[taxon$species_name!=""|is.na(taxon$species_name),]
  taxon2<-taxon2[!(taxon2$bin_uri == "" | is.na(taxon2$bin_uri)), ]
  taxon2$base_number=str_count(taxon2$nucleotides, pattern="[A-Z]")
  taxon2<-taxon2[(taxon2$base_number>size),]
  assign('taxon',taxon,envir=.GlobalEnv)
}
  

и

   taxaInput_2 <- reactive({grades2(unlist(strsplit(input$taxa2, ",")), input$seqsize)})