Используйте Shiny для сбора данных от пользователей в Google Sheet - PullRequest
1 голос
/ 20 июня 2020

Я хотел бы использовать интерфейс Shiny для сбора данных из пользовательских вводов, например, в этой Средней статье

Статья написана для пакета googlesheets, но теперь нам нужно используйте googlesheets4.

Думаю, мой код не будет работать из-за понимания реактивных элементов.

#load libraries
library(shiny)
library(shinydashboard)
library(googlesheets4)
library(DT)

ui <- fluidPage(

    # Define UI
    ui <- fluidPage(
        # App title ----
        titlePanel("Seflie Feedback"),
        # Sidebar layout with input and output definitions ----
        sidebarLayout(
            # Sidebar to demonstrate various slider options ----
            sidebarPanel(
                # Input: Overall Rating
                sliderInput(inputId = "helpful", 
                            label = "I think this app is helpful",
                            min = 1, 
                            max = 7,
                            value = 3),
                actionButton("submit", "Submit")
            ),
            mainPanel(
            ))
    )
)
server <- function(input, output, session) {
    # Reactive expression to create data frame of all input values ----
    sliderValues <- reactive({

        usefulRating <- input$helpful

        Data <-  data.frame(
            Value = as.character(usefulRating),
            stringsAsFactors = FALSE)
    })

    #This will add the new row at the bottom of the dataset in Google Sheets.
    observeEvent(input$submit, { 
         MySheet <- gs4_find() #Obtain the id for the target Sheet
        MySheet <-   gs4_get('https://docs.google.com/spreadsheets/d/162KTHgd3GngqjTm7Ya9AYz4_r3cyntDc7AtfhPCNHVE/edit?usp=sharing')
        sheet_append(MySheet , data = Data)
    })
}
shinyApp(ui = ui, server = server)

Я заменил gs4_get () ссылкой, а не идентификатором, чтобы поддержать вас в помощи мне. Если вы не можете получить доступ к ссылке, вы можете временно заменить ссылку идентификатором листа Google из ваших собственных листов.

Когда я запускаю код, я вижу следующее: Предупреждение: Ошибка в is.data.frame: объект «Данные» не найден. Когда я заменяю полезныйРейтинг <- input $ полезно на полезныйРейтинг <- 4 или полезныйРейтинг <- 5 или другое значение, данные записываются в Лист. </p>

Спасибо за любые идеи :)

1 Ответ

1 голос
/ 22 июня 2020
#load libraries
library(shiny)
library(shinydashboard)
library(googlesheets4)
library(DT)

    ui <- fluidPage(
        titlePanel("Seflie Feedback"),
        sidebarLayout(
            sidebarPanel(
                #This is where a user could type feedback
                textInput("feedback", "Plesae submit your feedback"),
           ),
                #This for a user to submit the feeback they have typed
                 actionButton("submit", "Submit")),
            mainPanel())

server <- function(input, output, session) {
    
    textB <- reactive({

         as.data.frame(input$feedback)

        })
    
    observeEvent(input$submit, {
        Selfie <-   gs4_get('https://docs.google.com/spreadsheets/d/162KTHgd3GngqjTm7Ya9AYz4_r3cyntDc7AtfhPCNHVE/edit?usp=sharing')
        sheet_append(Selfie, data = textB())
    })
}
shinyApp(ui = ui, server = server)
...