Saya menggunakan fungsi ReactiveFileReader di aplikasi R Shiny untuk membaca dan memvisualisasikan data yang dicatat secara real time (data 1 detik). File data disimpan dalam satu folder tetapi file baru dibuat setiap jam. Saya menggunakan jalur file reaktif yang harus diperbarui ketika file baru dibuat dan mulai membaca dan memplot data dari file baru, namun, reaktifFileReader tampaknya tidak reaktif terhadap perubahan dalam argumen filePath. Aplikasi hanya membeku pada titik data terakhir dari file sebelumnya hingga saya menyegarkan seluruh aplikasi, pada saat itu file baru divisualisasikan.

Berikut adalah potongan kode yang saya gunakan untuk membaca di data.

dir <- "/media/sf_D_DRIVE"      
file_name <- reactive({paste0(dir, "/", list.files(dir)[length(list.files(dir))])})
df_1 <- reactiveFileReader(intervalMillis = 100, session = session , filePath =  file_name, readFunc = read.csv)

Saya juga mencoba menempatkan filePath secara langsung sebagai argumen.

dir <- "/media/sf_D_DRIVE"      
df_1 <- reactiveFileReader(intervalMillis = 100, session = session , filePath =  paste0(dir, "/", list.files(dir)[length(list.files(dir))]), readFunc = read.csv)

Adakah yang punya pemikiran tentang cara memperbarui filePath secara reaktif dan aplikasi membaca dan memvisualisasikan data dari file baru yang ditambahkan ke folder tanpa harus menyegarkan?

Sayangnya, sulit untuk memberikan contoh yang dapat direproduksi karena Anda memerlukan pencatatan data dan sisi pembuatan file dari contoh untuk membuatnya berfungsi. Semoga masih ada yang punya ide! Terima kasih!

0
CharityG 12 Mei 2021, 04:07

1 menjawab

Jawaban Terbaik

reactiveFileReader didasarkan pada reactivePoll. Anda dapat menggunakan reactivePoll untuk mencapai apa yang Anda inginkan:

df_1 <- reactivePoll(
  1000, session,
  checkFunc = function(){
    # this function returns the most recent modification time in the folder
    files <- list.files(dir, full.names = TRUE)
    info <- file.info(files)
    max(info$mtime)
  },
  valueFunc = function(){
    # this function returns the content of the most recent file in the folder
    files <- list.files(dir, full.names = TRUE)
    info <- file.info(files)
    i <- which.max(info$mtime)
    read.csv(files[i])
  }
)
2
Stéphane Laurent 12 Mei 2021, 04:39