R's try() ตรวจไม่พบข้อผิดพลาดที่เกิดจาก file.remove()

ฉันกำลังพยายามตรวจจับข้อผิดพลาดที่เกิดจาก file.remove() เช่น เมื่อเปิดไฟล์ Excel ดังนั้นจึงไม่สามารถลบออกได้ ดูเหมือนว่าฟังก์ชัน try() ของ R จะไม่ทำงานในกรณีนี้ รหัสต่อไปนี้ยังคงสร้างข้อผิดพลาดให้กับคอนโซล แม้ว่าอาร์กิวเมนต์ silent จะถูกตั้งค่าเป็น TRUE และไม่มีสิ่งใดถูกจัดเก็บไว้ในตัวแปร:

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

removal.error [1] เท็จ

ข้อเสนอแนะใด ๆ ว่าทำไมถึงเป็นกรณีนี้หรือวิธีแก้ปัญหาเพื่อตรวจจับข้อผิดพลาดดังกล่าว


person user116    schedule 10.11.2016    source แหล่งที่มา
comment
แล้วtryCatchล่ะ? คุณสามารถส่งคืนข้อความได้ในกรณีมีข้อผิดพลาดหรือคำเตือน ฯลฯ   -  person drmariod    schedule 10.11.2016
comment
โปรดอ่านความช่วยเหลือสำหรับ file.remove และดูในส่วนค่า ASFAICS ทั้ง file.remove และ try ทำงานตามที่คาดไว้และอธิบายไว้   -  person Bhas    schedule 10.11.2016


คำตอบ (1)


ฟังก์ชัน try หรือ tryCatch ไม่พบข้อผิดพลาดใดๆ เนื่องจากฟังก์ชัน remove.file ทำงานอย่างถูกต้อง (ตามที่ @Bhas กล่าว) และจะส่งค่า FALSE ที่สามารถใช้เพื่อจัดการกับข้อผิดพลาดดังที่แสดงด้านล่าง:

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'
  }
}

หลังจากนั้นคุณจะสามารถจัดการเรื่องนี้ได้ตามที่คุณวางแผนไว้

OBS: รันโค้ดนี้ทีละบรรทัด ไม่เช่นนั้น R จะเร็วกว่า Excel และคุณจะไม่เห็นข้อผิดพลาดใดๆ ในคอนโซล

person Tomás Barcellos    schedule 12.11.2016