0

在下面的应用程序中,我正在尝试访问带有名称列表的 Google 表格。该应用程序将显示两个随机名称,用户将选择他们喜欢的名称。发生这种情况时,应用程序会更新 Google 表格,为获胜的名字创建一个“win”,为失败的名字创建一个“loss”。为了开始这个“名字之战”,用户必须选择一个名为“开始一个新名字之战”的按钮。然后两个随机名称显示为单选按钮,同时出现一个提交按钮。用户需要选择提交按钮来记录他们的偏好。

我的问题是“name_choice_submit”按钮,因为我不知道如何存储单选按钮的选择,以便我可以调整 Google 表格。错误发生在if (input$names_button == name1). 我收到消息“参数长度为零。我认为我没有正确调用 names_button,但无法弄清楚。我是 Shiny 的新手,因此非常感谢任何建议。谢谢。

带有数据的 Google 表格

闪亮的错误信息

library(shiny)
library(tidyverse)
library(googlesheets4)
library(shinydashboard)
library(DT)


options(gargle_oauth_cache = ".secrets")
gs4_auth()
list.files(".secrets/")
gs4_deauth()
gs4_auth(cache = ".secrets", email = "name@email.com")

ui <- fluidPage(
  actionButton("name_battle", "Begin a New Name Battle"),
  uiOutput("nameControls"),
  uiOutput("name_choice_submit"),
)

server <- function(input, output, session) {
  observeEvent(input$name_battle, {
    output$nameControls <- renderUI({
      Selfie <-   read_sheet('url')
      Selfie2 <- as.data.frame(Selfie)
      n <- nrow(Selfie2)
      samp <- sample(1:n, 2, replace=FALSE)
      row1 <- samp[1]
      row2 <- samp[2]
      name1 <- paste(as.character(Selfie2[row1,1]), as.character(Selfie2[row1,2]), as.character(Selfie2[row1,3]))
      name2 <- paste(as.character(Selfie2[row2,1]), as.character(Selfie2[row2,2]), as.character(Selfie2[row2,3]))
      names <- c(name1, name2)
      
      radioButtons("names_button", "Choose Names", names, selected = character(0))

#Below is where everything breaks down
      output$name_choice_submit <- renderUI({
          actionButton("name_choice_submit", label = "Submit Preferred Name")
          
          if (input$names_button == name1) {
            winner_wins = Selfie2[row1,4] + 1 #adds 1 to the wins column
            loser_wins = Selfie2[row2,5] + 1 #adds 1 to the losses column
            
            winner_row = Selfie2[row1,]
            winner_row[4] = winner_wins
            loser_row = Selfie2[row2,]
            loser_row[4] = loser_wins
            
            
            Selfie <-   gs4_get('url')
            range_delete(Selfie,
                         range = row1)
            range_delete(Selfie,
                         range = row2)
            sheet_append(Selfie, data = as.data.frame(winner_row))
            sheet_append(Selfie, data = as.data.frame(winner_row))
          }
          else if (input$nameControls == name2) {
            winner_wins = Selfie2[row2,4] + 1
            loser_wins = Selfie2[row1,5] + 1
            
            winner_row = Selfie2[row2,]
            winner_row[4] = winner_wins
            loser_row = Selfie2[row1,]
            loser_row[4] = loser_wins
            
            Selfie <-   gs4_get('url')
            range_delete(Selfie,
                         range = row1)
            range_delete(Selfie,
                         range = row2)
            sheet_append(Selfie, data = as.data.frame(winner_row))
            sheet_append(Selfie, data = as.data.frame(winner_row))
          }
        })
    })
  })
}

shinyApp(ui = ui, server = server)
4

0 回答 0