Masalah lain, di hadapan NAMESPACE, adalah bahwa Anda mencoba menjalankan fungsi yang tidak diekspor dari paket foo .
Misalnya (dibuat-buat, saya tahu, tetapi):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Pertama, Anda seharusnya tidak memanggil metode S3 secara langsung, tetapi mari kita asumsikan plot.prcomp
sebenarnya adalah beberapa fungsi internal yang berguna di paket foo . Untuk memanggil fungsi seperti itu jika Anda tahu apa yang Anda lakukan memerlukan penggunaan :::
. Anda juga perlu mengetahui namespace tempat fungsi ditemukan. Menggunakan getAnywhere()
kami menemukan bahwa fungsinya dalam statistik paket :
> 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>
Jadi sekarang kita dapat memanggilnya langsung menggunakan:
> stats:::plot.prcomp(mod)
Saya telah menggunakan plot.prcomp
hanya sebagai contoh untuk menggambarkan tujuannya. Dalam penggunaan normal, Anda seharusnya tidak memanggil metode S3 seperti ini. Tetapi seperti yang saya katakan, jika fungsi yang ingin Anda panggil ada (mungkin fungsi utilitas tersembunyi misalnya), tetapi dalam a namespace
, R akan melaporkan bahwa ia tidak dapat menemukan fungsi kecuali jika Anda memberi tahu namespace mana yang harus dicari. .
Bandingkan ini dengan yang berikut:
stats::plot.prcomp
Yang di atas gagal karena saat stats
digunakan plot.prcomp
, itu tidak diekspor stats
sebagai kesalahan memberitahu kami:
Kesalahan: 'plot.prcomp' bukan objek yang diekspor dari 'namespace: stats'
Ini didokumentasikan sebagai berikut:
pkg :: name mengembalikan nilai nama variabel yang diekspor di namespace pkg, sedangkan pkg ::: name mengembalikan nilai nama variabel internal.