ปัญหาอีกประการหนึ่งในการปรากฏตัวของ NAMESPACE ที่เป็นว่าคุณกำลังพยายามที่จะใช้ฟังก์ชั่นแพคเกจจาก unexported foo
ตัวอย่างเช่น (วางแผนฉันรู้ แต่):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
ประการแรกคุณไม่ควรจะเรียกวิธี S3 โดยตรง แต่ให้ถือว่าplot.prcomp
เป็นจริงบางฟังก์ชั่นภายในที่มีประโยชน์ในแพคเกจfoo :::
การเรียกใช้ฟังก์ชันเช่นถ้าคุณรู้ว่าสิ่งที่คุณทำต้องใช้ คุณต้องทราบ namespace ที่พบฟังก์ชั่น ใช้getAnywhere()
เราพบว่าฟังก์ชั่นอยู่ในสถิติแพคเกจ:
> getAnywhere(plot.prcomp)
A single object matching ‘plot.prcomp’ was found
It was found in the following places
registered S3 method for plot from namespace stats
namespace:stats
with value
function (x, main = deparse(substitute(x)), ...)
screeplot.default(x, main = main, ...)
<environment: namespace:stats>
ดังนั้นตอนนี้เราสามารถเรียกมันได้โดยตรงโดยใช้:
> stats:::plot.prcomp(mod)
ฉันใช้plot.prcomp
เป็นตัวอย่างเพื่ออธิบายวัตถุประสงค์ ในการใช้งานปกติคุณไม่ควรเรียกวิธีการ S3 เช่นนี้ แต่อย่างที่ฉันบอกถ้าฟังก์ชั่นที่คุณต้องการโทรหาอยู่ (อาจเป็นฟังก์ชั่นยูทิลิตี้ที่ซ่อนอยู่) แต่อยู่ใน a namespace
, R จะรายงานว่ามันไม่สามารถหาฟังก์ชั่นได้ .
เปรียบเทียบสิ่งต่อไปนี้:
ข้อผิดพลาดstats::plot.prcomp
ด้านบนล้มเหลวเนื่องจากในขณะที่stats
ใช้plot.prcomp
มันจะไม่ถูกส่งออกจากstats
เนื่องจากข้อผิดพลาดบอกเราอย่างถูกต้อง:
ข้อผิดพลาด: 'plot.prcomp' ไม่ใช่วัตถุที่ส่งออกจาก 'namespace: stats'
เอกสารนี้มีดังต่อไปนี้:
pkg :: name ส่งคืนค่าของชื่อตัวแปรที่เอ็กซ์พอร์ตในเนมสเปซ pkg ในขณะที่ pkg ::: name ส่งคืนค่าของชื่อตัวแปรภายใน