【问题标题】:ggplot2 in shiny error: ggplot2 doesn't know how to deal with data of class packageIQRggplot2 出现闪亮错误:ggplot2 不知道如何处理 packageIQR 类的数据
【发布时间】:2013-12-21 08:56:54
【问题描述】:

我正在尝试构建一个简单的shiny 应用程序,该应用程序基于输入创建数据表并使用ggplot2 输出折线图。我收到以下错误:

错误:ggplot2 不知道如何处理类 packageIQR 的数据

在这个应用程序中,用户使用滑块来定义时间段或 X 的长度,以及通过定义起始值和 X 上的值变化来定义值的变化。绘图是一条线性线.我是shiny 的新手,所以如果有更好的设置方法,我还想就设置服务器代码的最佳方法提出建议,但现在我只是得到一个错误并且没有产生任何情节。

服务器.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output){

  reactive({
    data <- data.table(months = seq(1, input$months, by = 1),
                   value  = seq(input$startingValue, 
                               input$startingValue + input$valueChange, 
                               length.out = input$months))
  })


   output$yield <- renderPlot({  
     p <- ggplot(data(), aes(x=months, y=value, colour=value)) +geom_line()
     print(p)
   })
})

【问题讨论】:

  • data 不是callable。尝试不使用()p &lt;- ggplot(data, aes(...
  • 如果我删除 () 我得到一个新的错误:ggplot2 不知道如何处理类函数的数据
  • data 是 R 中的一个函数。您通常应该避免将其用作变量名...
  • 谢谢,这很有用。我将其更改为 inputData,现在看到找不到对象“inputData”
  • 我对@9​​87654330@不是很熟悉,但是我想你想分配reactive的结果:inputData &lt;- reactive({...})然后在ggplot部分调用它:ggplot(inputData(), ...)。跨度>

标签: r ggplot2 shiny


【解决方案1】:

你只需要定义反应函数:

data <- reactive({
        data.table(months = seq(1, input$months, by = 1),
               value  = seq(input$startingValue, 
                           input$startingValue + input$valueChange, 
                           length.out = input$months))
})

注意这里你不需要定义响应函数,因为你只有一个调用者。您可以将所有代码放在情节部分:

output$yield <- renderPlot({  
 data <- data.table(months = seq(1, input$months, by = 1),
               value  = seq(input$startingValue, 
                           input$startingValue + input$valueChange, 
                           length.out = input$months))
 p <- ggplot(data, aes(x=months, y=value, colour=value)) +geom_line()
 print(p)
})

【讨论】:

  • 感谢您的帮助。您回答的第二部分是一个可行的解决方案,非常清楚。
  • 也许我做错了......但是当我在 output$yield 之外但在 shinyServer 中包含第一段代码时,然后保持 output$yield 的其余部分相同 [包括 p
  • @rrbest 是的,你犯了一个错误。你应该像你的问题一样打电话给data(),而不是data
  • 是的,这可行,并允许我与其他呼叫者一起使用数据。非常感谢,我给了你一些声誉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
相关资源
最近更新 更多