Редактирование фрейма данных после реактивной загрузки в R блестящий - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь редактировать столбцы во фрейме данных. Я загружаю их с помощью fileInput, однако постоянно получаю сообщение об ошибке «Операция недопустима без активного реактивного контекста. (Вы пытались сделать что-то, что можно сделать только из реактивноговыражение или наблюдатель.) ".Кто-нибудь знает, почему я могу получить эту ошибку?Любая помощь очень учится !!

server = function(input, output) {

  a1 = reactive({
    if(is.null(input$myFile$datapath)) NULL
    else{
      read_excel(input$myFile$datapath)
    }
  })


  x <- as.POSIXct(a1()$Month)

  a1()$mo <- strftime(x, "%m")
  a1()$yr <- strftime(x, "%Y")
  a1()$qrt <- quarter(x, with_year = FALSE, fiscal_start = 01)

  #subsetting data to display sales reps that hold a quota 

  newdata <- a1()[grepl("Y", a1()$`Quota Held Flag`),]

  #fixing participation column into categorical for donut chart
  newdata$Participation[is.na(newdata$Participation)] <- 0
  newdata$Participation <- factor(newdata$Participation, labels = 
                                    c("0-99%","100%")) 

  #grouping data
  newdata2 <- newdata %>%
    group_by(yr, mo, qrt) 
}
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 13 декабря 2018

Код в функции server() действительно должен только устанавливать реактивные объекты и реагировать на реактивные события.В теле самой функции server() не должно быть никаких данных о манипулировании данными, потому что при запуске данные еще не доступны.Нечто подобное имеет больше смысла

ui <- fluidPage(
  fluidPage(
    titlePanel("Uploading Files"),
    fileInput('myFile', 'Choose File'),
    tableOutput('contents')
  )
)
server <- function(input, output) {

  a1 <- reactive({
    req(input$myFile)
    read_excel(input$myFile$datapath)
  })

  newdata <- reactive({
    a1 <- a1()
    x <- as.POSIXct(a1$Month)

    a1$mo <- strftime(x, "%m")
    a1$yr <- strftime(x, "%Y")
    a1$qrt <- quarter(x, with_year = FALSE, fiscal_start = 01)

    newdata <- a1[grepl("Y", a1$`Quota Held Flag`),]

    #fixing participation column into categorical for donut chart
    newdata$Participation[is.na(newdata$Participation)] <- 0
    newdata$Participation <- factor(newdata$Participation, labels = c("0-99%","100%")) 

    #grouping data
    newdata %>%
      group_by(yr, mo, qrt)     
  })

  output$contents <- renderTable(        
    newdata()        
  )

}
shinyApp(ui = ui, server = server)

Обратите внимание, как a1 читает файл, который загружает пользователь.Тогда реактивный объект newdata будет обновляться всякий раз, когда обновляется a1, и преобразует данные для вас.Затем мы можем подключить это к выводу, чтобы он действительно был обработан.

...