R มีคำสั่งยืนยันเหมือนใน python หรือไม่?


100

คำสั่งที่ตรวจสอบว่ามีบางสิ่งเป็นจริงหรือไม่และหากไม่พิมพ์ข้อความแสดงข้อผิดพลาดที่ระบุและออก

คำตอบ:


123

stopifnot()

คุณอาจสนใจแพ็คเกจเช่นRunitและtestthatสำหรับการทดสอบหน่วย


มีวิธีควบคุมข้อความแสดงข้อผิดพลาดที่รายงานหาก stopifnot () หยุดหรือไม่
นิค

13
@ นิกไม่มี. ใช้stopifnot()สำหรับการทดสอบความถูกต้องเพื่อทดสอบว่าโค้ดกำลังทำในสิ่งที่ควรจะทำ แต่if (blahdiblah) stop("error message")สำหรับการทดสอบอินพุตเพื่อทดสอบว่าอินพุตของโปรแกรมนั้นถูกต้อง เฉพาะอย่างหลังเท่านั้นที่ควรเกิดขึ้นระหว่างการใช้งานปกติ
Harlan

6
ดูassertthatแพ็คเกจใหม่ของ Hadley ซึ่งให้คำตอบที่ดีกว่าstopifnot: github.com/hadley/assertthat
Harlan

12

@ นิค:

คุณสามารถควบคุมข้อความแสดงข้อผิดพลาดของคุณได้หากคุณเขียนฟังก์ชันด้วยชื่อที่สื่อความหมายเพื่อทดสอบเงื่อนไขที่จะทำให้เกิดข้อผิดพลาดในโปรแกรมของคุณ นี่คือตัวอย่าง:

Less_Than_8 = function(x) return(x < 8)

for (i in 1:10)
{
  print(i)
  stopifnot(Less_Than_8(i))
}

ขั้นตอนนี้จะพิมพ์ตัวเลข 1 ถึง 8 จากนั้นพิมพ์ข้อความว่า

Error: Less_Than_8(i) is not TRUE

คงจะดีไม่น้อยถ้า "i" ในวงเล็บถูกแทนที่ด้วยค่าที่ไม่ผ่านการทดสอบ แต่คุณจะได้รับสิ่งที่คุณจ่ายไป

หากคุณต้องการอะไรที่แปลกกว่านั้นให้ดู Runit และทดสอบตามที่ Harlan แนะนำ


คุณสามารถใส่นิยามฟังก์ชันไว้ข้างในได้stopifnot()เช่นกัน
naught101

2
naught101 ประเด็นของการทดสอบในฟังก์ชันที่ตั้งชื่อคือการรับชื่อของการทดสอบที่พิมพ์ในข้อความแสดงข้อผิดพลาด
Matthew

5

สิ่งนี้สามารถทำได้ด้วยstopคำสั่ง คำสั่งนี้จะหยุดการทำงานของฟังก์ชันและพิมพ์ข้อความแสดงข้อผิดพลาด ตัวอย่างเช่นเราสามารถทดสอบว่าตัวแปรsomethingคือFALSE:

if(something == FALSE){
   stop("error message to print")   
}

ในทำนองเดียวกันwarningคำสั่งจะพิมพ์คำเตือน (แต่ดำเนินการต่อรหัสต่อไป)

if(something == FALSE){
   warning("error message to print")   
}

สิ่งเหล่านี้มีให้โดยฐาน R และไม่จำเป็นต้องมีแพ็คเกจเพื่อรันหรือรวมไว้ในการเขียนฟังก์ชันของคุณเอง ฉันชอบวิธีนี้ในการเขียนโค้ดที่มีการพึ่งพาน้อยกว่าและไวยากรณ์นี้ใช้กันอย่างแพร่หลายในการพัฒนาแพ็คเกจ อย่างไรก็ตามฟังก์ชันที่คล้ายกันนี้ได้รับการสนับสนุนโดยแพ็กเกจ "assertthat" พร้อมกับassert_thatฟังก์ชันที่เพิ่งเปิดตัวซึ่งเป็นส่วนหนึ่งของ "tidyverse" ของ Hadley

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.