Оператор googlevis $ недействителен для атомарных векторов

Я столкнулся с ужасной ошибкой «оператор $ недействителен для атомарных векторов». Это происходит, когда я добавляю файл gvisLineChart. Какие-либо предложения?

library(shiny)
library(googleVis)

#this is a dput of a sql query to make the example reproducible. 
#In reality this will be an RODBC sqlQuery result
dataset <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), 
  value = c(1.68294196961579, 82.4641565111739, 83.3056274959818, 
  6.73176787846317, 5.89029689365528, 2.52441295442369, 4.20735492403948, 
  0.841470984807897, 5.04882590884738, 15.1464777265421)), 
  .Names = c("id", "value"), row.names = c(NA, 10L), class = "data.frame")

ui <- shinyUI(
     plotOutput("motionPlot")
)

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

    output[["motionPlot"]] <- renderGvis({

    Line <- gvisLineChart(dataset, xvar=c("id"), yvar=c("value"))     
    plot(Line)
   })

})

shinyApp(ui = ui, server = server)

person dataphile    schedule 16.09.2016    source источник
comment
Очень сложно помочь без воспроизводимого примера. Похоже, dataset не является data.frame, но мы не можем запустить ваш код для его тестирования.   -  person MrFlick    schedule 16.09.2016
comment
В этом примере я использовал базу данных msdb, чтобы ее мог запустить любой, у кого есть база данных mssql. Любой запрос к любой базе данных воспроизведет результат. К сожалению, это вопрос, связанный с базой данных, поэтому «воспроизводимый» будет включать ссылку на базу данных. Спасибо за проявленный интерес, приветствуется любая помощь.   -  person dataphile    schedule 18.09.2016
comment
Я вывел результат sqlQuery, чтобы сделать его воспроизводимым.   -  person dataphile    schedule 19.09.2016


Ответы (1)


Графики googleVis не совсем похожи на обычные графики в R. Обычные графики создают статические изображения, но googleVis также создает в основном мини-веб-страницы с данными HTML и javascript. Следовательно, вы не должны использовать plotOutput, вы должны использовать htmlOutput для отображения их на странице. Кроме того, вам не нужно использовать plot(). Это будет работать с данными вашего примера

ui <- shinyUI(
     htmlOutput("motionPlot")
)

server <- shinyServer(function(input, output) {
    output[["motionPlot"]] <- renderGvis({
        gvisLineChart(dataset, xvar=c("id"), yvar=c("value"))     
   })
})

shinyApp(ui = ui, server = server)

Я нашел больше примеров здесь путем поиска в Google "блестящий gvisLineChart". Протестировано с googleVis_0.6.1, shiny_0.13.2, R 3.2.5

person MrFlick    schedule 19.09.2016
comment
Потрясающие! Спасибо, MrFlick - person dataphile; 20.09.2016