简体   繁体   中英

Making a Leaderboard in R Shiny

I am attempting to make a leaderboard in R Shiny for my school where users could submit their name, teacher's name, and their score in textInputs by clicking an actionButton. I am having trouble with the following:

a) Making the textInputs submit on the push of the actionButton (I know I should use the isolate function, but have no idea where/when/how)

b) Storing the info the user inputs with the data frame so that when the app opens on a second device it still shows the info the first person uses

My code is below:

### Libraries
library('tidyverse')
library('readxl')
library('shiny')
library('DT')



# Define UI 
ui <- fluidPage(
    
    # Application title
    titlePanel("Scoreboard"),
    
    # Sidebar 
    sidebarLayout(
        sidebarPanel(
            h5("Sidebar Text"),
        ),
        
        # Main Panel
        mainPanel(
            tabsetPanel(type = "tabs",
                        tabPanel("Add Score", 
                        textInput("name_input", "Insert Your Name Below"),                                           textInput("teacher_input", "Insert Your Teacher's Last Name Below"),
                        textInput("score_input", "Insert Your Score Below"),
                        actionButton("sumbit_button", "Click Button to Submit!")
                        ),
                        tabPanel("ScoreBoard", dataTableOutput("score_table"))
                       )
        )
    )
)

# Define server logic 
server <- function(input, output) {
    
    # Read In Sample Scores as a base dataframe to add user inputs to. 
    scores <- read_excel("Sample_Scores.xlsx")
    scores <- scores[order(scores$Scores, decreasing = FALSE),]
    names(scores) <- c("Score", "Name", "Teacher")
    
    output$score_table <- renderDataTable({
        
        new_score <- input$score_input
        new_name <- input$name_input
        new_teacher <- input$teacher_input
        
        new_student <- c(new_score, new_name, new_teacher)
        
        scores <- rbind(scores, new_student)
        
        })
}

# Run the application 
shinyApp(ui = ui, server = server)

Figured it out. The best solution was to read in the df as a csv every time I open the app and then write the info back to a csv every time a score is added to the scoreboard.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM