Dans une interface shiny, je souhaiterais que l'utilisateur puisse éditer (en fait, remplir) directement une matrice ; matrice d'une dimension que l'utilisateur définit lui-même. Ensuite, cette matrice serait utilisée pour différents calculs.
J'ai trouvé le package rhandsontable qui semble permettre d'afficher des tables que l'on peut éditer, mais je ne parviens pas à obtenir exactement ce que je veux. Voici le code :
Code : Tout sélectionner
library(rhandsontable)
library(shiny)
## ui.R :
ui <- fluidPage(
titlePanel("rHandsontable"),
sidebarLayout(
sidebarPanel(
numericInput("dim", "Dimension de la table", min=2, value=5, max=10) # dimension de la table
),
mainPanel(
h3("La table à éditer :"),
rHandsontableOutput("tabEdit"), # affichage de la table à éditer (vide)
h3("On l'affiche (simule sa disponibilité pour d'autres calculs) :"),
tableOutput("tabDisplay") # affichage de la table "définitive", une fois éditée
# (simple vérif destinée à voir si la table sera bien utilisable dans des calculs)
)
)
)
## server.R :
server <- function(input, output, session) {
mat <- reactive({
tab <- matrix(NA, nrow=input$dim, ncol=input$dim)
colnames(tab) <- paste("V", 1:input$dim)
rownames(tab) <- paste("I", 1:input$dim)
return(tab)
})
output$tabEdit <- renderRHandsontable({rhandsontable(mat(), readOnly=FALSE)})
output$tabDisplay <- renderTable(mat())
}
## Lancer l'appli :
runApp(list(server=server, ui=ui))
Comme vous pouvez le voir en exécutant le code, la table s'affiche bien... mais n'est pas éditable, en dépit de l'argument readOnly=FALSE. Comment y remédier ?
De plus, je suppose fortement (même si du coup je n'ai pas de moyen de le vérifier) que même si cette table était éditable, on ne pourrait pas en récupérer ensuite son contenu aussi simplement que je l'ai fait, mais on va prendre les problèmes un par un :D
Merci pour votre aide !