Isso deve ser uma pergunta frequente, portanto, seja o mais completo possível. A resposta é uma resposta da comunidade, portanto, fique à vontade para editar se achar que algo está faltando.
Estou usando R e tentei, some.function
mas recebi a seguinte mensagem de erro:
Error: could not find function "some.function"
Esta questão surge com muita regularidade. Quando você recebe esse tipo de erro no R, como você pode resolvê-lo?
r
function
error-handling
r-faq
Joris Meys
fonte
fonte
R
comando falha, masq()
! Conselho será muito apreciado!Respostas:
Há algumas coisas que você deve verificar:
install.packages("thePackage")
(Isso só precisa ser feito uma vez)require(thePackage)
oulibrary(thePackage)
(isso deve ser feito toda vez que você inicia uma nova sessão R)Se você não tem certeza de qual pacote está localizado, você pode fazer algumas coisas.
help.search("some.function")
ou??some.function
para obter uma caixa de informações que pode informar em qual pacote ele está.find
egetAnywhere
também pode ser usado para localizar funções.findFn
nosos
pacote, como explicado em esta resposta .RSiteSearch("some.function")
ou pesquisar com rdocumentation ou rseek são maneiras alternativas de encontrar a função.Às vezes, você precisa usar uma versão mais antiga do R, mas execute o código criado para uma versão mais recente. Funções adicionadas recentemente (por exemplo, hasName no R 3.4.0) não serão encontradas. Se você usa uma versão R mais antiga e deseja usar uma função mais nova, pode usar o backports do pacote para disponibilizar essas funções. Você também encontra uma lista de funções que precisam ser suportadas no repositório git de backports . Lembre-se de que as versões R anteriores à R3.0.0 são incompatíveis com os pacotes criados para a R3.0.0 e versões posteriores.
fonte
hasName
função noutils
. No entanto, eu estava usando o 3.3.1 ehasName
não fui apresentado até a 3.4.0. Como você não pode atualizarutils
como uma biblioteca autônoma, o R / R Studio disse que não tinha nenhuma biblioteca para atualizar.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
nemhttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
dizer "introduzido no R 3.4.0", acabei descobrindo isso navegando pelos repositórios do github e olhandoblame
para utils / R / hasName.R e base / R / match.RRSiteSearch("hasName")
e obtido a mesma informação. Foi por isso que adicionei isso anos atrás a essa resposta. É um truque útil saber ;-)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):
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. UsandogetAnywhere()
descobrimos que a função está nas estatísticas do pacote :Agora, podemos chamá-lo diretamente usando:
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 umnamespace
, 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
usadoplot.prcomp
, não é exportado destats
acordo com o erro:Isso está documentado da seguinte maneira:
fonte
could not find function "anova.lm"
... corrigida a chamada emstats:::anova.lm()
vez de #:::
foi referido como um erro de design e::
é o preferido. Não é possível encontrar facilmente a referência.::
e:::
são diferentes e sua edição não funciona ! Aplot.prcomp()
função não é exportada do namespace de estatísticas, portanto, você precisa usar:::
.Normalmente, posso resolver esse problema quando um computador está sob meu controle, mas é mais um incômodo ao trabalhar com uma grade. Quando uma grade não é homogênea, nem todas as bibliotecas podem ser instaladas, e minha experiência costuma ser que um pacote não foi instalado porque uma dependência não foi instalada. Para resolver isso, verifico o seguinte:
.libPaths()
é um bom cheque.ldd
resultados para R, para ter certeza sobre as bibliotecas compartilhadasTendo encontrado isso um pouco, algumas dessas etapas se tornam bastante rotineiras. Embora o número 7 possa parecer um bom ponto de partida, eles estão listados na ordem aproximada da frequência em que eu os uso.
fonte
Se isso ocorrer enquanto você verifica o seu pacote (verificação do R CMD), consulte o seu NAMESPACE.
Você pode resolver isso adicionando a seguinte declaração ao NAMESPACE:
Isso exporta tudo o que não começa com um ponto ("."). Isso permite que você tenha suas funções ocultas, começando com um ponto:
fonte
Eu tive o erro
acontecer ao fazer a verificação R CMD de um pacote que eu estava fazendo com o RStudio. Eu achei adicionando
exportPattern (".")
para o arquivo NAMESPACE fez o truque. Como nota de rodapé, eu tinha inicialmente configurado o RStudio para usar o ROxygen para fazer a documentação - e selecionei a configuração em que o ROxygen gravaria meu arquivo NAMESPACE para mim, o que continuava apagando minhas edições. Portanto, na minha instância, desmarquei NAMESPACE da configuração do Roxygen e adicionei exportPattern (".") Ao NAMESPACE para solucionar esse erro.
fonte
Este erro pode ocorrer mesmo que o nome da função seja válido se alguns argumentos obrigatórios estiverem ausentes (ou seja, você não forneceu argumentos suficientes).
Eu entendi isso em um contexto Rcpp, onde escrevi uma função C ++ com argumentos opcionais e não forneceu esses argumentos em R. Parecia que argumentos opcionais do C ++ eram vistos como obrigatórios por R. Como resultado, R não pôde encontrar uma função correspondente ao nome correto, mas um número incorreto de argumentos.
Função Rcpp:
SEXP RcppFunction(arg1, arg2=0) {}
R Chamadas:
RcppFunction(0)
gera o erroRcppFunction(0, 0)
nãofonte
O Rdocumentation.org possui uma função de pesquisa muito útil que, entre outras coisas, permite encontrar funções - de todos os pacotes do CRAN, bem como dos pacotes do Bioconductor e do GitHub.
fonte
Se você estiver usando,
parallelMap
precisará exportar funções personalizadas para os trabalhos escravos, caso contrário, você receberá um erro "não foi possível encontrar a função".Se você definir um nível não ausente no
parallelStart
mesmo argumento, deve ser passado paraparallelExport
, caso contrário, você obterá o mesmo erro. Portanto, isso deve ser rigorosamente seguido:fonte
Você pode corrigir esse erro espaçando o nome :: a chamada de função
para
fonte
Eu obtive o mesmo erro, estava executando a versão .99xxx, verifiquei atualizações no menu de ajuda e atualizei o My RStudio para 1.0x, e o erro não veio
Solução simples, basta atualizar o seu R Studio
fonte