闪亮R中的箱形图

时间:2018-10-01 15:09:02

标签: r shiny boxplot

我正在尝试通过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 :(得分:1)

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)

要获取更多说明/见解,请参阅此question

答案 1 :(得分:0)

您为什么不只使用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)

答案 2 :(得分:0)

如果有机会,也许您想签出ggplot2库。它们具有非常非常好用且易于使用的功能和漂亮的情节。