library
การใช้งานเสมอ ไม่เคยที่ 1require
การใช้งาน
( 1แทบจะไม่เคยอาจจะ .)
สรุปนี้เป็นเพราะเมื่อใช้require
รหัสของคุณอาจจะให้ผลที่แตกต่างกันผลที่ผิดพลาดโดยไม่ต้องส่งสัญญาณความผิดพลาด นี่เป็นของหายาก แต่ไม่ใช่สมมุติ! พิจารณารหัสนี้ซึ่งให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับว่าสามารถโหลด {dplyr} ได้หรือไม่:
require(dplyr)
x = data.frame(y = seq(100))
y = 1
filter(x, y == 1)
ซึ่งอาจนำไปสู่ผลลัพธ์ที่ผิดพลาดอย่างละเอียด ใช้library
แทนที่จะrequire
โยนข้อผิดพลาดที่นี่ส่งสัญญาณชัดเจนว่ามีบางอย่างผิดปกติ นี้เป็นสิ่งที่ดี
นอกจากนี้ยังทำให้การดีบักความล้มเหลวอื่น ๆ ยากขึ้น: ถ้าคุณrequire
ทำแพ็คเกจเมื่อเริ่มต้นสคริปต์และใช้การส่งออกในบรรทัดที่ 500 คุณจะได้รับข้อความแสดงข้อผิดพลาด "ไม่พบวัตถุ" foo "ในบรรทัด 500 แทนที่จะเป็น ข้อผิดพลาด“ ไม่มีแพ็คเกจที่เรียกว่า 'bla'”
กรณีใช้งานที่ยอมรับได้เท่านั้นrequire
คือเมื่อมีการตรวจสอบค่าส่งคืนทันทีตามคำตอบอื่น ๆ ที่แสดง นี่เป็นรูปแบบที่ค่อนข้างธรรมดา แต่ถึงแม้ในกรณีเหล่านี้จะเป็นการดีกว่า (และแนะนำให้ดูด้านล่าง) เพื่อแยกการตรวจสอบการมีอยู่และการโหลดของแพคเกจแทน
เพิ่มเติมเทคนิคrequire
จริงโทรlibrary
ภายใน (ถ้าแพคเกจถูกไม่ยึดติดอยู่แล้ว - require
จึงทำการตรวจสอบซ้ำซ้อนเพราะlibrary
ยังตรวจสอบไม่ว่าจะเป็นแพคเกจถูกโหลดแล้ว) นี่คือการใช้งานที่เรียบง่ายrequire
เพื่อแสดงให้เห็นว่ามันทำอะไร:
require = function (package) {
already_attached = paste('package:', package) %in% search()
if (already_attached) return(TRUE)
maybe_error = try(library(package, character.only = TRUE))
success = ! inherits(maybe_error, 'try-error')
if (! success) cat("Failed")
success
}
นักพัฒนา R ที่มีประสบการณ์เห็นด้วย:
Yihui Xieผู้แต่ง {knitr}, {bookdown} และแพ็คเกจอื่น ๆพูดว่า :
ท่านสุภาพบุรุษและสุภาพสตรีฉันเคยพูดเรื่องนี้มาก่อน: require () เป็นวิธีที่ผิดในการโหลดแพ็คเกจ R; ใช้ไลบรารี () แทน
Hadley Wickhamผู้แต่งแพ็คเกจ R ยอดนิยมมากกว่าคนอื่นพูดว่า
ใช้library(x)
ในสคริปต์วิเคราะห์ข้อมูล […] คุณไม่จำเป็นต้องใช้require()
( requireNamespace()
ดีกว่าเกือบทุกครั้ง)