用反应值子集对象将失败

时间:2018-06-28 11:02:00

标签: r shiny

  1. 列表项

我有一个反应性值不起作用的问题,因为我认为它应该起作用。

下面的小代码描述了该问题。函数firstsub2基本上会通过删除由于某些原因我们不想保留的样本(这是使用phyloseq biocondcutor软件包中的subset_samples函数)来将一个对象子集成一个较小的对象。

UI.R

 myui <-     
  fluidPage(


            navbarPage("Project",



                       ## foldchanges
                       tabPanel("Foldchanges",
                                titlePanel("Permanova: Analysis of variance using distance matrices"),


                                # Sidebar layout with input and output definitions ----
                                sidebarLayout(

                                  # Sidebar panel for inputs ----
                                  sidebarPanel(

                                    actionButton("dofoldchanges", "Generate foldchanges")

                                       ),


                                  mainPanel(
                                    # Output: Tabset w/ plot, summary, and table ----
                                    tabsetPanel(id="foldchanges",type = "tabs",
                                                tabPanel(title="Summary", value=1, verbatimTextOutput("summary_foldchanges"))
                                                #tabPanel("Table pairwise",value=4, dataTableOutput("tablepermanovapw"))


                                    )

                                  )
                                )
                       )

                      )
               )

SERVER.R

#To install phyloseq
#source("https://bioconductor.org/biocLite.R")
#biocLite("phyloseq")

library(shiny)
library(phyloseq)

myserver <- function(input, output, session) {

source("foldchanges.R", local = TRUE)
}

foldchanges.R

# Filter object
firstsub2 <- reactive({
  values$rn <- as.character(sample_data(values$physeq)[,"Description"]$Description)))
  cat(values$rn)

  #The subset_samples function below will not work
  filteredtaxo <- subset_samples(values$physeq, Description %in% values$rn)  
  return(filteredtaxo)

})


values <- reactiveValues()
observeEvent(input$dofoldchanges, {

  rich_sparse_biom = system.file("extdata", "rich_sparse_otu_table.biom", package = "phyloseq")
  physeq = import_biom(rich_sparse_biom, parseFunction = parse_taxonomy_greengenes)
  print(physeq)
  values$physeq <- physeq

  values$filtered <- firstsub2()


})

此示例将基本上返回与导入的对象相同的对象

1 个答案:

答案 0 :(得分:0)

您的代码仍然有一些错误,尤其是服务器文件(一些不必要的逗号)。

我认为您的应用程序可以正常工作,但是它始终是与values$rn相同的文件。我在subset_sample下方添加了另一行(目前未注释),以测试子设置是否正常工作。例如,如果将values$rn更改为"human skin",将会看到不同的结果。

但是我不知道如何更改它。例如,仅以values$rn的第一个元素为例,我遇到一个找不到对象错误。但是当我这样包含“人类皮肤”时,它就可以了。

但这也许已经对您有所帮助。

library(shiny)
# source("https://bioconductor.org/biocLite.R")
# biocLite("phyloseq")
library(phyloseq)

myui <- {fluidPage(
    navbarPage("Project",
               ## foldchanges
               tabPanel("Foldchanges",
                        titlePanel("Permanova: Analysis of variance using distance matrices"),
                        # Sidebar layout with input and output definitions ----
                        sidebarLayout(
                          # Sidebar panel for inputs ----
                          sidebarPanel(
                            actionButton("dofoldchanges", "Generate foldchanges")
                          ),
                          mainPanel(
                            # Output: Tabset w/ plot, summary, and table ----
                            tabsetPanel(id="foldchanges",type = "tabs",
                                        tabPanel(title="Summary", value=1, 
                                                 verbatimTextOutput("summary_foldchanges"),
                                                 verbatimTextOutput("summary_physeq"))
                                        )))))
)}

myserver <- function(input, output, session) {

  values <- reactiveValues()

  firstsub2 <- reactive({
    req(values$physeq)
    input$dofoldchanges

    values$rn <- as.character(sample_data(values$physeq)[,"Description"]$Description)
    cat(values$rn)


    #The subset_samples function below will not work
    filteredtaxo <- subset_samples(values$physeq, "Description" %in% values$rn)
    ## Change it to one of the next lines, to see that subsetting works.
    # filteredtaxo <- subset_samples(values$physeq, Description %in% "human skin")
    # filteredtaxo <- subset_samples(values$physeq, Description %in% "human gut")

    return(filteredtaxo)
  })


  observeEvent(input$dofoldchanges, {
    rich_sparse_biom = system.file("extdata", "rich_sparse_otu_table.biom", package = "phyloseq")
    physeq = import_biom(rich_sparse_biom, parseFunction = parse_taxonomy_greengenes)
    print(physeq)
    values$physeq <- physeq

    values$filtered <- firstsub2()
  })

  output$summary_physeq <- renderPrint({
    req(values$physeq)
    values$physeq
  })  
  output$summary_foldchanges <- renderPrint({
    req(values$filtered)
    values$filtered
  })
}

shinyApp(myui, myserver)