1

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!

Community
  • 1
  • 1
Ariel A
  • 474
  • 4
  • 14

1 Answers1

1

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)
})
Shree
  • 10,835
  • 1
  • 14
  • 36
  • This doesn't really seem to solve my issue. Even if none is encoded in the server, there is no real way to change it on the user end (unless there is a way to make it the default choice). In that vein, how do I make "None" the standard value in the server if there is no way to change it on front end? Thank you! – Ariel A Nov 12 '18 at 23:42
  • 1
    Do you mean this doesn't work because the user will see `None` instead of `NULL` when using the app? – Qwfqwf Nov 12 '18 at 23:50
  • No. When I put it into the server file, it doesn't appear as an option for the User on the UI. I also tried putting it in UI with command c(a, "None" = NULL) but that was also to no avail. – Ariel A Nov 12 '18 at 23:55
  • 1
    @ArielA updated the answer. Let me know if that's what you are looking for. – Shree Nov 13 '18 at 00:08
  • Beautiful! Thank you for all of your help! – Ariel A Nov 13 '18 at 00:44