Мое первое приложение R Shiny

#shiny

#блестящий

Вопрос:

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

У меня есть простой набор данных из 100 X наблюдений и 100 Y наблюдений. Я хочу построить гистограммы как для X, так и для Y с помощью ползунков для ячеек. Я также хочу создать диаграмму рассеяния Y на X. Я был бы очень признателен за помощь здесь.

Я не новичок в R, но я новичок в Shiny. Есть ли способ, которым я могу использовать ggplot для создания визуальных эффектов?

Большое спасибо.

Комментарии:

1. Начните со встроенной функциональности R, а также с шаблона примера shiny. Используйте shiny::renderPlot() . Внутри renderPlot() верните hist() (для гистограммы) и plot() (для точечной диаграммы) с соответствующими параметрами, которые вы упомянули в своем сообщении. Кажется, что X и Y являются статическими, поэтому вы можете сохранить их, например, в своей глобальной области.

2. Спасибо за ответ. 🙂

Ответ №1:

Это краткий пример с двумя разными макетами. Используйте один из пользовательских интерфейсов.R конечно. Поставьте глобальный.R в той же папке, что и пользовательский интерфейс.R и server.R

ui.R v1

     library(shiny)
    library(ggplot2)
    shinyUI(fluidPage(

      titlePanel("Quick Shiny Example"),
      sidebarLayout(
        sidebarPanel(
           sliderInput("xBins",
                       "Number of bins for X variable:",
                       min = 1,
                       max = 50,
                       value = 30),
           sliderInput("yBins",
                       "Number of bins for Y variable:",
                       min = 1,
                       max = 50,
                       value = 30)
        ),
        mainPanel(
           plotOutput("xDistPlot"),
           plotOutput("yDistPlot"),
           plotOutput("xyScatterPlot")
        )
      )
    ))
  

ui.R v2

     library(shiny)
    library(ggplot2)
    shinyUI(fluidPage(
            titlePanel("Quick Shiny Example"),
            fluidRow(
                    column(width = 4, 
                           sliderInput("xBins",
                                       "Number of bins for X variable:",
                                       min = 1,
                                       max = 50,
                                       value = 30)
                    ),
                    column(width = 4,
                           sliderInput("yBins",
                                       "Number of bins for Y variable:",
                                       min = 1,
                                       max = 50,
                                       value = 30)
                    ),
                    column(width = 4)
            ),
            fluidRow(
                    column(width = 4, 
                           plotOutput("xDistPlot")
                    ),
                    column(width = 4,
                           plotOutput("yDistPlot")
                    ),
                    column(width = 4, 
                           plotOutput("xyScatterPlot")
                    )
            )
    ))
  

server.R

     library(shiny)
    library(ggplot2)

    shinyServer(function(input, output) {

      output$xDistPlot <- renderPlot({
        g <- ggplot(df, aes(x = x)) 
        g <- g   geom_histogram(bins = input$xBins)
        g
      })
      output$yDistPlot <- renderPlot({
              g <- ggplot(df, aes(x = y)) 
              g <- g   geom_histogram(bins = input$yBins)
              g
      })
      output$xyScatterPlot <- renderPlot({
              g <- ggplot(df, aes(x = x, y = y)) 
              g <- g   geom_point()
              g
      })

    })
  

global.R

 df <- data.frame(
    x = rnorm(100),
    y = rnorm(100)*2
  

)

Ответ №2:

Вот мой ответ, со случайными числами для X и Y , просто как быстрая идея. Добавление ggplot к этому должно быть простым.

 library(shiny)

ui <- shinyUI(
  fluidPage(
    sliderInput("nrBinsX", "Number of bins to display for X", min = 2, max = 10, value = 5),
    plotOutput("histX"),
    sliderInput("nrBinsY", "Number of bins to display for Y", min = 2, max = 10, value = 5),
    plotOutput("histY"),
    plotOutput("scatterXY")
  )
)

server <- shinyServer(function(input, output, session) {

  dataFrame <- data.frame (
    "X" = sample(100,100,replace = T),
    "Y" = sample(100,100,replace = T)
  )

  getHist <- function (var,nr){
    return (hist(
      x = var,
      breaks = seq(0,100,100/nr),
      freq = T
    ) )
  }

    output$histX <- renderPlot({
      return(
        getHist( var = dataFrame$X,
                 nr = input$nrBinsX
        ) ) })

    output$histY <- renderPlot({
      return(       return(
        getHist( var = dataFrame$Y,
                 nr = input$nrBinsY
        )
      ) ) })

  output$scatterXY <- renderPlot({
    return(
      plot(x = dataFrame$X,
           y = dataFrame$Y)
    )
  })

})

shinyApp(ui = ui, server = server)
  

Комментарии:

1. Большое вам спасибо. Я потратил много часов на поиск в Интернете четкого, хорошо структурированного примера, подобного этому. 🙂