Это неполный ответ.В надежде, что другой пользователь сможет улучшить его.Если нет, то это лучший ответ.
Я пытался примерно полчаса, но по какой-то причине (возможно, причина в том, что DT
не предназначен для использования в качестве Excel), я не могу получить результат вычисления в DT
-Таблица.Однако реактивность и расчет работают, если я не отображаю результат в DT
-таблице!
Я внес только два изменения:
- Я добавил таблицу отладки
- Я заменил ваш
dplyr
-код и удалил вычисление
Код выглядит так:
library(shiny)
library(DT)
ui <- basicPage(
DT::dataTableOutput('x1'),
tableOutput('debug')
)
server <- function(input, output, session) {
# create a character vector of shiny inputs
shinyInput = function(FUN, len, id, ...) {
inputs = character(len)
for (i in seq_len(len)) {
inputs[i] = as.character(FUN(paste0(id, i), label = NULL, ...))
}
inputs
}
# obtain the values of inputs
shinyValue = function(id, len) {
unlist(lapply(seq_len(len), function(i) {
value = input[[paste0(id, i)]]
if (is.null(value)) 1 else value
}))
}
# a sample data frame
DF <- reactive({
iris_adj <- iris
iris_adj$adjust<-shinyInput(numericInput, nrow(iris), 'adj', value = 1)
# iris_adj$Petal_area<-iris$Petal.Length*iris$Petal.Width/shinyValue('adj',nrow(iris))
return(iris_adj)
})
# render the table containing shiny inputs
output$x1 <- DT::renderDataTable(
# use slider to control number of rows shown in table
DF(), server = FALSE, escape = FALSE, options = list(
preDrawCallback = JS('function() {
Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() {
Shiny.bindAll(this.api().table().node()); } ')
)
)
output$debug<-renderTable({
cbind(DF()[,-6],shinyValue('adj',nrow(iris)),Petal_Area=iris$Petal.Length*iris$Petal.Width/shinyValue('adj',nrow(iris)))
})
}
shinyApp(ui, server)
Как только я добавлю вычисление, вывод из DT
не находит пути в таблицу отладки.
О личной заметке: я помню, как использовал этот трюк shinyInput
и shinyValue
около полугода назад.Я также помню, что это было очень очень нестабильно. Я бы не рекомендовал его всем, кто хочет разработать стабильное приложение
Я также помню, что был еще один R-пакет для полных интерактивных таблиц.Это называется rhandsontables
.Может быть, попробуйте это: https://jrowen.github.io/rhandsontable/