【问题标题】:How to select a data set on shiny app?如何在闪亮的应用程序上选择数据集?
【发布时间】:2018-06-20 02:21:30
【问题描述】:

这是我在学习编程时遇到的第一个问题......

我正在尝试制作一个 Shiny 应用程序,该应用程序根据用户选择的数据集进行绘图。

但我不断收到以下错误:-

ggplot2 不知道如何处理类字符的数据

即使我将两个轴都指定为数字。

当我自己运行ggplot 代码时,它使绘图没有问题,所以我认为问题在于调用数据集。

我正在为这个问题调用基础包数据集,但我需要一个答案,它可以解决存储在我电脑上的数据集的问题。

library(shiny)
ui <- fluidPage(
            sidebarLayout(
              sidebarPanel(selectInput("data", h4("select data"),
                                       choices=c("mtcars" = "mtcars",
                                                 "pressure" = "pressure"))),
            mainPanel(
               PlotOutput("graph")

              )
            ))

服务器

server <- function(input, output) {

library(ggplot2)
library(dplyr)

base <- reactive ({
base <- input$data })

output$graph <- renderPlot({

  ggplot(base(), aes(as.numeric(base[[2]]), as.numeric(base[[3]]))) + 
  geom_col()
})
}

shinyApp(ui = ui, server = server)

提前感谢您的帮助!

【问题讨论】:

    标签: r ggplot2 shiny reactive


    【解决方案1】:

    首先,input$data 返回一个字符串。它不会返回与该字符串的值同名的 data.frame。如果您将 data.frame 作为字符串传递,ggplot() 将不起作用:

    ggplot(mtcars, aes(mpg, cyl)) + geom_point()     #OK
    ggplot("mtcars", aes(mpg, cyl)) + geom_point()   # NOT OK
    

    不妨试试

    base <- reactive ({get(input$data) })
    

    它使用get() 来获取一个带有其名称的字符串版本的对象。

    但即便如此,base[[1]] 也无法正常工作。绘图时,应首先将 data.frame 保存到变量中。此外,在aes() 中重复数据值并不是一个好主意——这确实是为了映射列而不是值。最好将aes_string() 与列名一起使用。例如

    output$graph <- renderPlot({
      mydata <- base()    
      ggplot(mydata, aes_string(names(mydata)[2], names(mydata)[3])) + 
      geom_col()
    })
    

    之所以有效,是因为它们是相同的

    ggplot(mtcars, aes(cyl, disp)) + geom_point()
    ggplot(mtcars, aes_string("cyl", "disp")) + geom_point()
    ggplot(mtcars, aes_string(names(mtcars)[2], names(mtcars)[3])) + geom_point()
    # since
    names(mtcars)[2]
    # [1] "cyl"
    names(mtcars)[3]
    # [1] "disp"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-20
      • 2017-11-18
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多