Başka bir sorun, bir NAMESPACE varlığında, paket foo dışa aktarılmamış bir işlevi çalıştırmak için çalışıyor olmasıdır .
Örneğin (yaptım, biliyorum, ama):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
İlk olarak, S3 yöntemlerini doğrudan çağırmamalısınız, ancak plot.prcomp
paket foo'da aslında bazı yararlı dahili işlev olduğunu varsayalım . Ne yaptığınızı biliyorsanız böyle bir işlevi çağırmak için kullanımını gerektirir :::
. Ayrıca işlevin bulunduğu ad alanını da bilmeniz gerekir. Kullanarak getAnywhere()
işlevin paket istatistiklerinde olduğunu görüyoruz :
> 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>
Şimdi doğrudan şunu kullanarak arayabiliriz:
> stats:::plot.prcomp(mod)
Kullandım plot.prcomp
Amacı açıklamak için örnek olarak . Normal kullanımda böyle S3 yöntemlerini çağırmamalısınız. Ama dediğim gibi, aramak istediğiniz işlev mevcutsa (örneğin gizli bir yardımcı program işlevi olabilir), ancak a'da namespace
, R, hangi ad alanına bakacağınızı söylemediğiniz sürece işlevi bulamayacağını bildirir. .
Bunu aşağıdakilerle karşılaştırın:
stats::plot.prcomp
Yukarıdaki başarısız olur, çünkü stats
kullanılırken plot.prcomp
dışa aktarılmazstats
hatalar bize söylediği gibi, :
Hata: 'plot.prcomp', 'ad alanı: istatistiklerden' dışa aktarılan bir nesne değil
Bu aşağıdaki gibi belgelenmiştir:
pkg :: name, pkg ad alanındaki dışa aktarılan değişken adının değerini döndürürken, pkg ::: name dahili değişken adının değerini döndürür.