Shiny App: Как получить общую сумму по столбцу - PullRequest
1 голос
/ 09 октября 2019

У меня две проблемы: -Первый, я не могу запустить таблицу, показывающую только нули или пустую, по этой причине я создал кнопку, которая устанавливает все до нуля, какой вид работы, но не идеальный. Во-вторых, я пытаюсь вычислить сумму столбцов для каждого столбца в rhandontable, но до сих пор я не смог заставить его работать.

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

ui <- fluidPage(
  rHandsontableOutput('table'),
  textOutput('result'),
  actionButton("recalc", "re-enter data")
)

season<-c("Spring","Summer","Autum","Winter")

server <- function(input,output,session)({
  values <- reactiveValues(data = NULL) ## assign it with NULL

  ## button press resets now the data frame
  observeEvent(input$recalc, { 
    values$data[] <- 0
  })

  ## changes in numericInput sets all (!) new values
  observe({
    values$data <-data.frame(row.names=season,Lake=1:4,Beach=1:4, Garden=1:4,stringsAsFactors = FALSE)

  })

  observe({
    if(!is.null(input$table))
      values$data <- hot_to_r(input$table)
  })


  output$table <- renderRHandsontable({
    req(values$data)
    rhandsontable(values$data,rowHeaderWidth = 100)
  })

})

shinyApp(ui = ui, server = server)

Ожидаемым результатом будет 5-й столбец с суммой каждого столбца. Стартовый стол, заполненный нулями или пробелом.

Если бы кто-нибудь мог указать мне правильное направление, это было бы очень признательно.

1 Ответ

1 голос
/ 09 октября 2019

Вы можете создать пустые ячейки с помощью NA. Пожалуйста, проверьте следующий пример для расчета colSums:

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  br(),
  rHandsontableOutput('table'),
  textOutput('result'),
  br(),
  actionButton("recalc", "re-enter data")
)

rowNames <- c("Spring", "Summer", "Autum", "Winter", "Sum")
defaultDF <- data.frame(
    row.names = rowNames,
    Lake = rep(NA_integer_, 5),
    Beach = rep(NA_integer_, 5),
    Garden = rep(NA_integer_, 5),
    stringsAsFactors = FALSE
  )

server <- function(input, output, session)
  ({
    values <- reactiveValues(data = defaultDF) ## assign it with NULL

    ## button press resets now the data frame
    observeEvent(input$recalc, {
      values$data[] <- NA_integer_
    })

    observe({
      req(input$table)
        DF <- hot_to_r(input$table)
        DF[setdiff(rowNames, "Sum"),]
        DF["Sum",] <- colSums(DF[setdiff(rowNames, "Sum"),], na.rm = TRUE)
        values$data <- DF
    })

    output$table <- renderRHandsontable({
      req(values$data)
      rhandsontable(values$data, rowHeaderWidth = 100) %>%
        hot_row(nrow(values$data), readOnly = TRUE)
    })

  })

shinyApp(ui = ui, server = server)
...