Как извлечь значения из данных, которые импортируются с использованием ReactiveFileReader? - PullRequest
0 голосов
/ 18 июня 2019

Я загружаю данные, используя reactiveFileReader, и хотел извлечь значения, такие как имена столбцов, чтобы использовать их в функции tableHeader.Однако я не понимаю, как я могу использовать данные самостоятельно, не пройдя функцию render*.Кто-нибудь может помочь?

    reactive_api_data <- reactiveFileReader(
        intervalMillis = 1000,
        session = session, 
        filePath = "data/data.csv",
        readFunc = read_csv
    )

    sketch <- htmltools::withTags(table(
        tableHeader(c("date", "a", "b", "c", "d", "e", "f", "g")), 
        tableFooter(c("Total",0,0,0,0,0,0,0))
    ))

    output$data_2019 <- DT::renderDataTable({ 
        reactive_api_data() %>% 
            filter(date > "2019-01-01")
    }, 
    container = sketch, 
    rownames = FALSE,
    options = list(paging = FALSE, searching = FALSE, lengthMenu = FALSE,
                      footerCallback = JS(
                          "function(row, data, start, end, display) {",
                          "var api = this.api(), data;",
                          "total = api.column(2).data().reduce( function(a, b) { return a + b }, 0);",
                          "$( api.column(2).footer() ).html(total);",
                          "}"
                          )
                      )

Я бы хотел сделать что-то вроде

tableHeader(colnames(data))

вместо того, чтобы вручную вводить имена столбцов, как это показано в моем коде выше:

tableHeader(c("date", "a", "b", "c", "d", "e", "f", "g"))

1 Ответ

0 голосов
/ 18 июня 2019

Я изменяю sketch на реактивную функцию, которая вызывается внутри renderDataTable.

reactive_api_data <- reactiveFileReader(
        intervalMillis = 1000,
        session = session, 
        filePath = "data/data.csv",
        readFunc = read_csv
    )

sketch <- reactive({ 
        htmltools::withTags(
            table(
                DT::tableHeader(colnames(reactive_api_data())), 
                DT::tableFooter(c("Total",0,0,0,0,0,0,0))
            )
        )
    })

output$data_2019 <- DT::renderDataTable({ 
        reactive_api_data() %>% 
            filter(date > "2019-01-01")
    }, 
    container = sketch(), 
    rownames = FALSE,
    options = list(paging = FALSE, searching = FALSE, lengthMenu = FALSE,
        footerCallback = JS(
            "function(row, data, start, end, display) {",
            "var api = this.api(), data;",
            "total = api.column(2).data().reduce( function(a, b) { return a + b }, 0);",
            "$( api.column(2).footer() ).html(total);",
            "}"
        )
    )
...