Как установить запрос RpostgreSQL в качестве объекта dataframe для RpivotTable? - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь использовать RpostgreSQL для получения исходных данных, которые будут переданы в пакет rpivotTable и отображены для пользователя с использованием глянца.

Ошибка: данные должны быть data.frame, data.table или table

К сожалению, я новичок в R и не могу понять, как настроить мой запрос postgreSQL для установки в качестве фрейма данных, таблицы или таблицы данных, чтобы можно было создать таблицу rpivotTable.

library(shiny)
library(DBI)
library(RPostgreSQL)
library(DT)
library(plotly)
library(rjson)
library(pool)
library(dplyr)
library(dbplyr)
library(rpivotTable)


ui <- fluidPage(


##DEBUGGING##

tableOutput("tbl"),

rpivotTable(Titanic),

### sql & rpivottable attempts ###

rpivotTable("OverallPivot"),

rpivotTableOutput("tbl2"),


output$pivtbl2 <- renderRpivotTable(rpivotTable(data = DataSet,
                                                aggregatorName = "Sum",
                                                vals = "Count",
                                                cols = "order_date",
                                                rows = "product_id",
                                                menuLimit = 1200,
                                                rendererName = "Line Chart"))

)


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


  ###DEBUGGING SERVER

  output$tbl <- renderTable({
    conn <- dbConnect(
      drv = dbDriver("PostgreSQL"),
      dbname = "store",
      host = "localhost",
      user = "postgres",
      password = "123456")
    on.exit(dbDisconnect(conn), add = TRUE)
    dbGetQuery(conn, paste0(
      "SELECT * FROM orders;"))
  })

  ###Attempted sql & rpivotTable attempts SERVER

  OverallPivot <- renderRpivotTable({    conn <- dbConnect(
    drv = dbDriver("PostgreSQL"),
    dbname = "store",
    host = "localhost",
    user = "postgres",
    password = "123456")
  on.exit(dbDisconnect(conn), add = TRUE)
  dbGetQuery(conn, paste0(
    "SELECT * FROM orders;"))
  })

  DataSet <- renderRpivotTable({    conn <- dbConnect(
    drv = dbDriver("PostgreSQL"),
    dbname = "store",
    host = "localhost",
    user = "postgres",
    password = "123456")
  on.exit(dbDisconnect(conn), add = TRUE)
  dbGetQuery(conn, paste0(
    "SELECT * FROM orders;"))
  })


tbl2 <- renderRpivotTable({
  conn <- dbConnect(
    drv = dbDriver("PostgreSQL"),
    dbname = "store",
    host = "localhost",
    user = "postgres",
    password = "123456")
  on.exit(dbDisconnect(conn), add = TRUE)
  dbGetQuery(conn, paste0(
    "SELECT * FROM orders;"))
})

  }


shinyApp(ui, server)

Я могу отобразить таблицу из postgres sql в формате "tbl" в блестящем и сводном виде, используя кадр данных Titanic в R в блестящем.

Я просто не могу понять, как объединить их вместе и использовать sql-запрос postgres для отображения rpivottable в блестящем.

Я разбил свои успешные примеры в разделе ОТЛАДКА и мойслабые неудачные попытки

Спасибо за помощь!

1 Ответ

0 голосов
/ 11 марта 2019

Вам необходимо создать объект R вне функции renderRpivotTable.

server.R

library(shiny)
library(rpivotTable)
library(RPostgreSQL)

function(input, output, session) {

  conn <- dbConnect(
    drv = dbDriver("PostgreSQL"),
    dbname = "store",
    host = "localhost",
    user = "postgres",
    password = "123456")

  on.exit(dbDisconnect(conn), add = TRUE)

  db_data <- dbGetQuery(conn, paste0("SELECT * FROM orders;"))

  output$pivot <- renderRpivotTable({
    rpivotTable(data = db_data)

  })

}

ui.R

library(shiny)
library(rpivotTable)

test_page <- fluidPage(
  rpivotTableOutput('pivot')
)

test_page
...