Участок в Блестящем Р - PullRequest
       21

Участок в Блестящем Р

0 голосов
/ 01 октября 2018

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

Предупреждение: Ошибка в model.frame.default: переменные длины различаются (найдено для 'input $ p')
[Нет трассировки стека]

Я не могу понять это, любая помощь будет высоко ценится

КОД:

library(shiny)

ui <- fluidPage(
  selectInput("p","p",choices = names(mtcars)),
  plotOutput("myplot"))

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

  output$myplot <- renderPlot({
    boxplot(mpg ~ input$p , data=mtcars)
  })
}

shinyApp(ui, server)

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Почему вы просто не используете get

library(shiny)

ui <- fluidPage(
  selectInput("p","p",choices = names(mtcars)),
  plotOutput("myplot"))

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

  output$myplot <- renderPlot({
    boxplot(mpg ~ get(input$p) , data=mtcars)
  })
}

shinyApp(ui, server)
0 голосов
/ 16 октября 2018

Если у вас есть шанс, возможно, вы захотите проверить библиотеку ggplot2.У них очень приятные и простые в использовании функции и симпатичный сюжет.

0 голосов
/ 01 октября 2018

boxplot ожидайте boxplot(mpg ~ cyl , data=mtcars), тогда как input$p вернет символьный вектор, как показано ниже

Browse[1]> input$p
[1] "mpg"

Одним из решений является использование as.formula

library(shiny)

ui <- fluidPage(
  #use setdiff to avoid this Error 'Error in .subset2: attempt to select less than one element in integerOneIndex'
  selectInput("p","p",choices = setdiff(names(mtcars),"mpg")),
  plotOutput("myplot"))

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

  output$myplot <- renderPlot({
    m <- paste0('mpg','~',input$p)
    boxplot(as.formula(m) , data=mtcars)
  })
}

shinyApp(ui, server)

Чтобы получить большеобъяснение / понимание см. этот вопрос

...