Một vấn đề khác, với sự hiện diện của NnamPACE, là bạn đang cố chạy một chức năng không được báo cáo từ gói foo .
Ví dụ (giả định, tôi biết, nhưng):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Đầu tiên, bạn không nên gọi trực tiếp các phương thức S3, nhưng giả sử plot.prcomp
thực sự là một số chức năng nội bộ hữu ích trong gói foo . Để gọi chức năng như vậy nếu bạn biết những gì bạn đang làm đòi hỏi phải sử dụng :::
. Bạn cũng cần biết không gian tên trong đó hàm được tìm thấy. Sử dụng getAnywhere()
chúng tôi thấy rằng chức năng là trong số liệu thống kê gói :
> 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>
Vì vậy, bây giờ chúng ta có thể gọi nó trực tiếp bằng cách sử dụng:
> stats:::plot.prcomp(mod)
Tôi đã sử dụng plot.prcomp
như một ví dụ để minh họa mục đích. Trong sử dụng bình thường, bạn không nên gọi các phương thức S3 như thế này. Nhưng như tôi đã nói, nếu hàm bạn muốn gọi tồn tại (ví dụ có thể là hàm tiện ích ẩn), nhưng trong một namespace
, R sẽ báo cáo rằng nó không thể tìm thấy hàm trừ khi bạn nói với nó không gian tên nào cần tìm .
So sánh điều này với các điều sau:
Lỗi stats::plot.prcomp
ở trên vì trong khi stats
sử dụng plot.prcomp
, nó không được xuất từ stats
vì lỗi đúng cho chúng ta biết:
Lỗi: 'plot.prcomp' không phải là một đối tượng được xuất từ 'không gian tên: số liệu thống kê'
Điều này được ghi lại như sau:
pkg :: name trả về giá trị của tên biến được xuất trong không gian tên pkg, trong khi pkg ::: name trả về giá trị của tên biến nội bộ.