Try() R tidak menangkap kesalahan yang dihasilkan oleh file.remove()

Saya mencoba menangkap kesalahan yang terjadi oleh file.remove(), misalnya ketika file Excel dibuka dan karenanya tidak dapat dihapus. Tampaknya fungsi try() R tidak berfungsi dalam kasus ini. Kode berikut masih menghasilkan kesalahan pada konsol meskipun argumen silent disetel ke TRUE dan tidak ada yang disimpan ke variabel:

removal.error <- try(file.remove("testfile.xlsx"), silent = T)

penghapusan.kesalahan [1] SALAH

Adakah saran mengapa hal ini terjadi atau solusi untuk mengatasi kesalahan seperti itu?


person user116    schedule 10.11.2016    source sumber
comment
Bagaimana dengan tryCatch? Anda dapat mengembalikan pesan jika terjadi kesalahan atau peringatan, dll   -  person drmariod    schedule 10.11.2016
comment
Silakan baca bantuan untuk file.remove dan lihat di bagian Nilai. ASFAICS file.remove dan try berfungsi seperti yang diharapkan dan dijelaskan.   -  person Bhas    schedule 10.11.2016


Jawaban (1)


Fungsi try atau tryCatch juga tidak menangkap kesalahan apa pun karena fungsi remove.file berfungsi dengan baik (seperti yang dikatakan oleh @Bhas) dan memberikan nilai FALSE yang dapat digunakan untuk menangani kesalahan seperti yang ditunjukkan di bawah ini:

write.csv2(x = data.frame(V1 = 1:10, V2 = letters[1:10]),
           file = 'file.csv')

shell('start excel file.csv') # opens excel to throw the error

rem <- try(file.remove('file.csv'))
rem # [1] FALSE

if (rem == FALSE) {
  shell('taskkill /F /IM excel.exe') # handle the error you pointed us
  rem_2 <- file.remove('file.csv')
  if(rem_2 == FALSE) { # if this was not the case, warn the user
    warning(warnings())
    class(rem) <- c(class(rem), "try-error") # and add try-error class to 'rem'
  }
}

Setelah itu, Anda akan dapat menanganinya sesuai rencana.

OBS: jalankan kode ini baris demi baris, jika tidak R akan lebih cepat dari excel dan Anda tidak akan melihat kesalahan apa pun di konsol.

person Tomás Barcellos    schedule 12.11.2016