ggplot2 в блестящей ошибке: ggplot2 не знает, как обращаться с данными класса packageIQR

Я пытаюсь создать простое приложение 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)
   })
})

person rrbest    schedule 04.12.2013    source источник
comment
data не callable. Попробуйте без (): p <- ggplot(data, aes(...   -  person Justin    schedule 04.12.2013
comment
Если я удалю (), я получу новую ошибку: ggplot2 не знает, как обращаться с данными функции класса   -  person rrbest    schedule 04.12.2013
comment
data — это функция в R. Как правило, вам следует избегать использования ее в качестве имени переменной...   -  person Justin    schedule 04.12.2013
comment
Спасибо, это полезно. Я изменил его на inputData и теперь вижу, что объект inputData не найден   -  person rrbest    schedule 04.12.2013
comment
В частности: ошибка в ggplot (inputData, aes (x = месяцы, y = доходность, цвет = доходность)): объект 'inputData' не найден   -  person rrbest    schedule 04.12.2013
comment
Я не очень хорошо знаком с shiny, но я думаю, что вы хотите присвоить результат reactive: inputData <- reactive({...}), а затем вызвать его в разделе ggplot: ggplot(inputData(), ...).   -  person Justin    schedule 04.12.2013


Ответы (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)
})
person agstudy    schedule 04.12.2013
comment
Спасибо за вашу помощь. Вторая часть вашего ответа была рабочим решением и очень ясным. - person rrbest; 04.12.2013
comment
Возможно, я делаю это неправильно... но когда я включаю первый фрагмент кода за пределами output$yield, но внутри ShinyServer, а затем оставляю остальную часть output$yield такой же [включая p ‹- ... и print(p) ] Я получаю сообщение об ошибке ggplot2 не знает, как обращаться с данными класса реактивного - person rrbest; 05.12.2013
comment
@rrbest да, вы делаете ошибку. Вы должны позвонить data(), как в вашем вопросе, а не data. - person agstudy; 05.12.2013
comment
Да, это работает и позволяет мне использовать данные с другими абонентами. Большое спасибо, я дал вам немного репутации. - person rrbest; 05.12.2013