Shiny R renderDataTable z tabelą zerową

Sep 08 2020

Jaki jest najlepszy sposób renderowania tabeli danych tylko wtedy, gdy istnieją dane? W tej chwili otrzymuję następujący błąd, ponieważ mówię błyszczącemu, aby renderował tabelę danych, nawet jeśli ma wartość NULL.

    Warning in file(file, "rt") :
    cannot open file '\': No such file or directory
    Warning: Error in file: cannot open the connection

Mój kod jest podzielony w ten sposób, w którym czytam dane, gdy użytkownik wybierze plik csv. Gdy użytkownik wybierze plik csv, błąd znika i wszystko działa poprawnie. Jak powiedzieć Shiny'emu, aby nie wyświetlał tabeli danych, dopóki nie zostanie wybrany prawidłowy plik?

filedata <- reactive({
  if (is.null(input$file_selector)){ # User has not uploaded a file yet return(NULL) } else { read.csv(paste0(parseDirPath(c(home = 'C:\\Users\\Ruben'), file_dir()),'\\',input$file_selector),skip=1)}
})

output$filetable <- renderDataTable({
  filedata()
})

Próbowałem umieścić wyjściowy kod $ filetable <- .... po linii read.csv ... w funkcji filedata <- ..., ale to też nie działa. Co jeszcze mam tutaj robić?

Odpowiedzi

1 Gourab Sep 08 2020 at 09:09

Możesz użyć funkcji req (), która sprawdzi, czy plik jest obecny, czy nie, a następnie przejdzie do kodu procedury

filedata <- reactive({
  file <-input$file_selector
  req(file)
  read.csv(paste0(parseDirPath(c(home = 'C:\\Users\\Ruben'), file_dir()),'\\',file),skip=1)}
})
1 YBS Sep 08 2020 at 08:55

Użyj req(), jak pokazano poniżej

filedata <- reactive({
  req(input$file_selector) read.csv(paste0(parseDirPath(c(home = 'C:\\Users\\Ruben'), file_dir()),'\\',input$file_selector),skip=1)
})