Как эффективно псевдоним переменных столбца в функции selectInput в R Shiny - PullRequest
0 голосов
/ 04 июля 2018

Отредактировано для ясности:

Я создаю блестящее приложение для исследования данных на диаграмме рассеяния. Упрощенный код ниже:

library(shiny)
library(ggplot2)
library(DT)
library(tools)
library(dplyr)
library(tidyverse)

#load data
Data <- Electorate_Data

# Define UI for application 
ui <- fluidPage(
titlePanel("Scatterplot"),

br(),

# Sidebar layout with a input and output definitions
sidebarLayout(
# Inputs
sidebarPanel(
  # Select variable for y-axis
  selectInput(inputId = "y", label = "Y-axis:",
              choices = colnames(Data[6:32])
  ),
  # Select variable for x-axis
  selectInput(inputId = "x", label = "X-axis:",
              choices = colnames(Data[6:32])
  ),

  width = 6
),

# Output:
mainPanel(
   # Create a container for tab panels
      tabsetPanel(

    tabPanel(
      title = "Explore the Data",
      # Show scatterplot
      plotOutput(outputId = "scatterplot")
     )

  ),

  width = 6  
)
 )
)

# Define server function required to create the scatterplot
server <- function(input, output) {

  # Create scatterplot object the plotOutput function is expecting
  output$scatterplot <- renderPlot({
    ggplot(data = Data, aes_string(x = input$x, y = input$y)) +
      geom_point() 
  })

}

# Create a Shiny app object
shinyApp(ui = ui, server = server)

Моя проблема заключается в том, что, когда я выбираю имена столбцов (используя имена функций) для выбора в функции selectInput, а имена содержат пробелы (то есть «Год 12» вместо Год12), моя диаграмма рассеяния не работает , выдав сообщение об ошибке:

Ошибка:: 1: 6: неожиданное 'in' 1: Родился в

Example of error

Пример кода

# Select variable for y-axis
  selectInput(inputId = "y", label = "Y-axis:",
              choices = colnames(Data[6:32])

Теперь, если я псевдоним каждой переменной, например, с помощью следующего кода, приложение прекрасно работает:

# Select variable for y-axis
  selectInput(inputId = "y", label = "Y-axis:",
          choices = "Year12" = "Year 12", 
                    "Born_Aus" = "Born in Australia",
                    "NoSchool" = "% of the Population Above 15 Years of Age that Didn't Attend School")
  ),

Мой вопрос - есть ли способ сделать псевдонимы более эффективными, чтобы я мог автоматизировать процесс создания псевдонимов. Я пробовал несколько подходов к взлому с использованием функции names (), но пока она выдает только ошибки.

В конце дня я могу решить это вручную, но, несомненно, есть лучший способ.

Спасибо

Edit:

Я включил подмножество данных, если это поможет. Вам придется изменить код:

  # Select variable for x-axis
  selectInput(inputId = "x", label = "X-axis:",
              choices = colnames(Data[6:32])
  ),

до

choices = colnames(Data)

для X и Y selectInputs

Данные:

> head(Electorate_Data[14:18])
  Born in Australia       LOTE    NoSchool    Year12 Median_age
1         0.6126271 0.29805068 0.012132744 0.5481394         36
2         0.6419959 0.27278743 0.006160949 0.4610346         39
3         0.8234175 0.05199925 0.002323880 0.3564276         40
4         0.5633673 0.45200442 0.011578501 0.4933828         38
5         0.8186847 0.06066808 0.005270832 0.2701636         44
6         0.4439803 0.59099798 0.017304021 0.5374834         35

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

В общем, давайте предположим, что у вас есть вектор имен, который должен быть возвращен selectInput() и называется x. И у вас есть второй, одинаково длинный вектор имен, которые пользователь видит при выборе, - y. Вы можете делать то, что хотите, сначала указав x имена y примерно так:

names(x)<-y 

Тогда вы можете использовать x в аргументе choices= для selectInput(). Пользователь увидит имена из y как варианты, но selectInput() вернет значения из x.

0 голосов
/ 04 июля 2018

Я не знаю, почему ваш блестящий не поддерживает имена столбцов, содержащие пробелы. Код ниже отлично работает на моей машине. Приведите воспроизводимый пример, который всегда будет полезен для других.

library(shiny)
df <- iris[,-5]
colnames(df) <- sub('\\.', ' ', colnames(df))
ui <- fluidPage(
  titlePanel("Scatterplot and Regression Calculator"),

  br(),

  # Sidebar layout with a input and output definitions
  sidebarLayout(
    # Inputs
    sidebarPanel(
      # Select variable for y-axis
      selectInput(inputId = "y", label = "Y-axis:",
                  choices = colnames(df)
      )
    ),
    mainPanel(
      plotOutput(outputId = "plot")
    )
  )
)
server <-function(input, output) {
  output$plot <- renderPlot({
    hist(df[[input$y]])
  })
}
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...