Search code examples
rshinynullphyloseq

How do I use the NULL Value as a variable call in R Shiny


How do I pass NULL as a Variable Value in RSHINY?

In phyloseq, there is a plot called plot_net. The most basic plot_net plot code looks like this:

data(enterotype)
#Eliminate samples with no entereotype denomination
enterotype = subset_samples(enterotype, !is.na(Enterotype))

plot_net(enterotype, maxdist = 0.1, point_label = NULL)

enter image description here

I am trying to create an RShiny app which allows a user to alter this graphic.

point_label has several different options (ex: "SecTech", "SampleID", NULL).

I already have all of the other values for this label, I am just not sure how to add NULL.

Here is what I did:

This might not run since it isn't in a shiny app but I included it as an example to illustrate the issue.

library(shiny)
library(phyloseq)

# Data: This data contains info about nodes and edges on Phyloseq data.
data(enterotype)
#Eliminate samples with no entereotype denomination. Make it a lesson to 
always catalogue data correctly from the start. 
enterotype = subset_samples(enterotype, !is.na(Enterotype))
       
# a is the collection of variable names for point_label
    
a <- sample_variables(enterotype)
    
theme_set(theme_bw())

# Define UI for application that draws a network plot
shinyUI(fluidPage(
  
  # Application title
  titlePanel("Network Plots"),
  
   
  sidebarLayout(
    sidebarPanel(
      
       
      selectInput("labelBy",
                  "Select the point label category",
                  ***choices = c(a, "NA" = NULL),***
                  selected = "NA")
    ),
    
    # Show a plot of the generated distribution
    mainPanel(
       plotOutput("netPlot")#,
       #plotOutput("networkPlot")
    )
  )
))

shinyServer(function(input, output) {
   
  output$netPlot <- renderPlot({
    
    plot_net(enterotype, maxdist = .1, point_label = input$labelBy)
    
  })
})
shinyApp(ui = ui, server = server)

This line is my question:

choices = c(a, "NA" = NULL)

How do I add NULL to my list of choices. No matter how I tried it, NULL was always taken as a zero value and it does not appear as an option.

If I write NULL as "NULL', the phyloseq function plot_net doesn't take it. It only takes the value point_label = NULL for no value.

I think that it is possible to create an if... else loop where if a user clicks NULL on a checkboxInput then the plot will be generated by a second line of code specifying that the value in point_label is NULL, but that can be really cumbersome if there are several variables with a possible NULL Value.

There probably is some obvious trick like placing a $ or % in front of the NULL value but I couldn't find it. If anyone could help it would be great!


Solution

  • I don't think there is a way to use NULL in selectInput. Here's an alternative which you almost worked out - Use "None" (or any other replacement value) in selectInput and switch it with NULL while plotting. This way you don't have to write multiple if...else.

    # update on UI side
    selectInput("labelBy",
                "Select the point label category",
                choices = c("None", a),
                selected = "None")
    
    # update on server side
    output$netPlot <- renderPlot({
      point_labels <- switch(input$labelBy, "None" = NULL, input$labelBy)
      plot_net(enterotype, maxdist = .1, point_label = point_labels)
    })