如何在R Shiny中将NULL值用作变量调用

时间:2018-11-12 22:40:27

标签: r shiny null phyloseq

如何在RSHINY中将NULL作为变量值传递?

在phyloseq,有一个情节叫做plot_net。 最基本的plot_net绘图代码如下所示:

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

我正在尝试创建一个RShiny应用程序,允许用户更改此图形。

point_label具有几个不同的选项(例如:“ SecTech”,“ SampleID”,NULL)。

我已经有了该标签的所有其他值,只是不确定如何添加NULL。

这是我所做的:

这可能不会运行,因为它不在闪亮的应用程序中,但我将其作为示例来说明问题。

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)

这是我的问题:

选择= c(a,“ NA” = NULL)

如何将NULL添加到我的选择列表中。无论我如何尝试,始终将NULL视为零值,并且它不会作为选项出现。

如果我将NULL写入“ NULL”,则phyloseq函数plot_net不会使用它。 没有值时只使用值point_label = NULL。

我认为可以创建一个if ... else循环,如果用户在checkboxInput上单击NULL,则该图将由第二行代码生成,该代码指定point_label中的值为NULL,但是如果有多个变量可能带有NULL值,则可能非常麻烦。

可能有一些明显的技巧,例如在NULL值前放置$或%,但我找不到它。如果有人可以帮助,那就太好了!

1 个答案:

答案 0 :(得分:1)

我认为NULL中没有使用selectInput的方法。这是您几乎可以解决的替代方法-在"None"中使用selectInput(或任何其他替换值),并在绘图时用NULL进行切换。这样,您不必编写多个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)
})