Saya sedang menulis aplikasi (Shiny) yang perlu memeriksa apakah Anda ingin menggunakan data tertentu, yang Anda perlukan untuk 1. mencentang kotak dan 2. tanggal data yang Anda periksa harus kurang dari 30 hari yang lalu. Untuk ini saya menulis pernyataan if (elseif)

recent <- reactive({ 
  ifelse( as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 && input$hist==TRUE, TRUE, FALSE )  
})

Di mana input$hist adalah kotak centang pada UI yang memiliki nilai default input$hist = FALSE dan jika Anda mencentang box = TRUE. Dan input$date juga merupakan input dari UI yang berupa tanggal. Jika Anda tidak terbiasa dengan Rshiny, reaktif hanya berarti bahwa nilai ini diperbarui secara otomatis jika ada perubahan pada antarmuka pengguna.

Saya mencoba menulis pernyataan if/else yang berbeda, dengan nilai variabel selain TRUE/FALSE dll... Jika saya hanya menggunakan persyaratan 30 hari, pernyataan saya tampaknya berfungsi.

Kesalahan: nilai hilang di mana TRUE/FALSE diperlukan

0
CFRedDemon 14 Agustus 2019, 12:35

1 menjawab

Jawaban Terbaik

Masalahnya adalah fase inisialisasi input. Pada titik ini input$date dan input$hist sama dengan NULL. Kesalahan muncul karena NULL bukan TRUE atau FALSE. Ada dua cara untuk pergi:

  1. Gunakan fungsi req(input$x). Dengan yang baru-baru ini akan dievaluasi hanya setelah input$x diubah untuk pertama kalinya. Dalam kasus Anda, Anda harus menggunakan juga req() pada kasus kedua.
  2. Evaluasi recent meskipun input$date dan input$hist adalah NULL. yaitu.:
recent <- reactive(
             !is.null(input$date) &&
             !is.null(input$hist) && 
             as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 &&
             input$hist
)

Dalam kasus 2 Anda harus berhati-hati dengan jenis input Anda. Misalnya input teks memiliki nilai default '' sehingga tidak pernah NULL

1
NpT 14 Agustus 2019, 11:29