Привет, хотелось бы иметь динамический (с изменяющимся числом строк) разборчивый, используя ввод с переключателей.
Так что я работал над блестящим, который нуждается в вводе данных в таблицу. Однако при добавлении большей сложности понадобился годовой вариант. Так что с текущей таблицей я мог бы попросить пользователя заполнить только первую строку, но это просто не красиво.
Это воспроизводимый пример таблицы в ее нынешнем виде
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)
Что я пытаюсь сделать (в коде ниже), это использовать значение в переключателях дляизменить количество строк в таблице. К сожалению, это не сработало. Любой указатель будет очень признателен.
library(shiny)
library(rhandsontable)
ui <- fluidPage(
br(),
rHandsontableOutput('table'),
textOutput('result'),
br(),
actionButton("recalc", "re-enter data")
radioButtons("Step", label = h4("Choose Step"),
choices = list("Annual" = 2, "Season" = 5),
inline= TRUE, selected = 1),
)
server <- function(input, output) ({
tabval<- reactive({
SeasonAnunal<- rowNames <- if (input$Step==2){ rowNames <- c("Spring", "Summer", "Autum", "Winter", "Sum")
} else{
rowNames <-c("Annual","Sum")}
defaultDF <- data.frame(
row.names = rowNames,
Lake = rep(NA_integer_, tabval()),
Beach = rep(NA_integer_, tabval()),
Garden = rep(NA_integer_, tabval()),
stringsAsFactors = FALSE)
})
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)