我有两个问题: -首先,由于这个原因,我无法启动仅显示零或空白的表,因此我创建了一个将所有功能设置为零的按钮,但是这种方法并不理想。 -其次,我正在尝试计算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列,每一列的总和。 填充有零或空白的起始表。
如果有人能指出我正确的方向,将不胜感激。
答案 0 :(得分:1)
您可以使用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)