Outro problema, na presença de um NAMESPACE, é que você está tentando executar uma função não exportada do pacote foo .
Por exemplo (artificial, eu sei, mas):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Primeiramente, você não deve chamar os métodos S3 diretamente, mas vamos assumir que plot.prcomp
na verdade era alguma função interna útil no pacote foo . Chamar essa função se você souber o que está fazendo exige o uso de :::
. Você também precisa conhecer o espaço para nome no qual a função é encontrada. Usando getAnywhere()
descobrimos que a função está nas estatísticas do pacote :
> 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>
Agora, podemos chamá-lo diretamente usando:
> stats:::plot.prcomp(mod)
Eu usei plot.prcomp
apenas como um exemplo para ilustrar o objetivo. Em uso normal, você não deve chamar métodos S3 como este. Mas, como eu disse, se a função que você deseja chamar existe (pode ser uma função de utilitário oculta, por exemplo), mas está em um namespace
, R relatará que não pode encontrar a função, a menos que você diga em qual namespace procurar .
Compare isso com o seguinte:
stats::plot.prcomp
O exemplo acima falha porque, enquanto é stats
usado plot.prcomp
, não é exportado de stats
acordo com o erro:
Erro: 'plot.prcomp' não é um objeto exportado de 'namespace: estatísticas'
Isso está documentado da seguinte maneira:
pkg :: name retorna o valor do nome da variável exportada no namespace pkg, enquanto pkg ::: name retorna o valor do nome da variável interna.