Как использовать значение NULL в качестве вызова переменной в R Shiny - PullRequest
0 голосов
/ 13 ноября 2018

Как передать значение NULL в качестве значения переменной в RSHINY?

В 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)

Эта строка - мой вопрос:

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

Как мне добавить NULL в мой список вариантов? Независимо от того, как я это пробовал, NULL всегда принималось за нулевое значение и не показывалось как опция.

Если я напишу NULL как «NULL», функция phyloseq plot_net не примет его. Это значение принимает только значение point_label = NULL без значения.

Я думаю, что возможно создать цикл if ... else, где, если пользователь нажимает NULL на checkboxInput, тогда график будет генерироваться второй строкой кода, указывающей, что значение в point_label равно NULL, но это может быть действительно громоздким, если есть несколько переменных с возможным значением NULL.

Возможно, есть какой-то очевидный трюк, например, размещение $ или% перед значением NULL, но я не смог его найти. Если бы кто-то мог помочь, это было бы здорово!

1 Ответ

0 голосов
/ 13 ноября 2018

Я не думаю, что есть способ использовать 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)
})
...