IT story

오류 : R에서… 기능을 찾을 수 없습니다

hot-time 2020. 5. 29. 23:45
반응형

오류 : R에서… 기능을 찾을 수 없습니다


FAQ 관련 질문이므로 가능한 한 완전하게 작성하십시오. 답변은 커뮤니티 답변이므로 누락 된 내용이 있으면 언제든지 수정하십시오.

이 질문은 메타에 대해 논의되고 승인되었습니다.

R을 사용하고 있는데 시도 some.function했지만 다음과 같은 오류 메시지가 나타납니다.

Error: could not find function "some.function"

이 질문은 매우 규칙적으로 나타납니다. R에서 이러한 유형의 오류가 발생하면 어떻게 해결할 수 있습니까?


몇 가지 확인해야 할 사항이 있습니다.

  1. 함수 이름을 올바르게 작성 했습니까? 이름은 대소 문자를 구분합니다.
  2. 기능이 포함 된 패키지를 설치 했습니까? install.packages("thePackage")(이 작업은 한 번만 수행하면됩니다)
  3. 해당 패키지를 작업 공간에 첨부 했습니까? require(thePackage)또는 library(thePackage)(이는 새로운 R 세션을 시작할 때마다 수행되어야합니다)
  4. 이 기능이 아직 존재하지 않는 이전 R 버전을 사용하고 있습니까?

해당 기능이 어떤 패키지에 있는지 확실하지 않은 경우 몇 가지 작업을 수행 할 수 있습니다.

  1. 올바른 패키지를 설치하고 첨부 /로드 한 경우 help.search("some.function")또는 ??some.function패키지에 포함 된 패키지를 알려주는 정보 상자를 입력 하십시오.
  2. find그리고 getAnywhere또한 기능의 위치를 찾을 수 있습니다.
  3. 패키지에 대한 실마리가 없으면 이 답변에 설명 된대로 패키지 findFn에서 사용할 수 있습니다 .sos
  4. RSiteSearch("some.function")또는 rdocumentation 또는 rseek를 사용 하여 검색하는 것이 기능을 찾는 대체 방법입니다.

때로는 이전 버전의 R을 사용해야하지만 최신 버전 용으로 작성된 코드를 실행해야 할 수도 있습니다. 새로 추가 된 기능 (예 : R 3.4.0의 hasName)은 찾을 수 없습니다. 이전 R 버전을 사용하고 최신 기능을 사용하려는 경우 패키지 백 포트사용하여 해당 기능을 사용할 수 있습니다. 또한 backports의 git repo에서 백 포트해야하는 함수 목록도 있습니다 . R3.0.0 이전의 R 버전은 R3.0.0 이상 버전 용으로 빌드 된 패키지와 호환되지 않습니다.


NAMESPACE가있는 또 다른 문제는 패키지 foo 에서 내 보내지 않은 함수를 실행하려고한다는 것 입니다.

예를 들어 (생각했지만 알고 있습니다) :

> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"

먼저, S3 메소드를 직접 호출해서는 안되지만 plot.prcomp실제로 패키지 foo 에서 유용한 내부 함수 라고 가정하자 . 수행중인 작업을 알고있는 경우 이러한 함수를 호출하려면를 사용해야합니다 :::. 함수가있는 네임 스페이스도 알아야합니다. 사용 getAnywhere()하여 함수가 패키지 통계 에 있음을 발견했습니다 .

> 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>

이제 다음을 사용하여 직접 호출 할 수 있습니다.

> stats:::plot.prcomp(mod)

plot.prcomp목적을 설명하기 위해 예제로 사용했습니다 . 정상적인 사용에서는 이와 같은 S3 메소드를 호출해서는 안됩니다. 그러나 내가 말했듯이, 호출하려는 함수가 존재하지만 (예 : 숨겨진 유틸리티 함수 일 수 있지만)에있는 namespace경우 R은 찾을 네임 스페이스를 알려주지 않으면 함수를 찾을 수 없다고보고합니다 .

이것을 다음과 비교하십시오 : stats::plot.prcomp의 오류는를 stats사용 하는 동안 오류가 올바르게 알려주므로 plot.prcomp내 보내지 않기 때문에 실패합니다 stats.

오류 : 'plot.prcomp'는 'namespace : stats'에서 내 보낸 객체가 아닙니다.

이것은 다음과 같이 문서화됩니다 :

pkg :: name은 네임 스페이스 pkg에서 내 보낸 변수 이름의 값을 반환하고 pkg ::: name은 내부 변수 이름의 값을 반환합니다.


일반적으로 컴퓨터를 제어 할 때이 문제를 해결할 수는 있지만 그리드 작업을 할 때는 더 많은 골칫거리가됩니다. 그리드가 동종이 아닌 경우 모든 라이브러리가 설치되지 않을 수 있으며 종속성이 설치되지 않아 패키지가 설치되지 않은 경우가 종종 있습니다. 이를 해결하기 위해 다음을 확인합니다.

  1. 포트란이 설치되어 있습니까? ( 'gfortran'을 찾으십시오.) 이는 R의 여러 주요 패키지에 영향을줍니다.
  2. Java가 설치되어 있습니까? Java 클래스 경로가 정확합니까?
  3. 관리자가 패키지를 설치했고 적절한 사용자가 사용할 수 있는지 확인하십시오. 때때로 사용자는 잘못된 장소에 패키지를 설치하거나 올바른 라이브러리에 대한 적절한 액세스없이 실행합니다. .libPaths()좋은 검사입니다.
  4. ldd공유 라이브러리에 대해 확인하기 위해 R에 대한 결과 확인
  5. 필요한 모든 패키지를로드하고 약간의 테스트 만 수행하는 스크립트를 정기적으로 실행하는 것이 좋습니다. 이를 통해 워크 플로에서 가능한 빨리 패키지 문제를 파악합니다. 이것은 기본적인 테스트가 작동하는지 확인하기위한 연기 테스트와 비슷하다는 점을 제외하고 테스트 또는 단위 테스트를 빌드하는 것과 유사합니다.
  6. If packages can be stored in a network-accessible location, are they? If they cannot, is there a way to ensure consistent versions across the machines? (This may seem OT, but correct package installation includes availability of the right version.)
  7. Is the package available for the given OS? Unfortunately, not all packages are available across platforms. This goes back to step 5. If possible, try to find a way to handle a different OS by switching to an appropriate flavor of a package or switch off the dependency in certain cases.

Having encountered this quite a bit, some of these steps become fairly routine. Although #7 might seem like a good starting point, these are listed in approximate order of the frequency that I use them.


If this occurs while you check your package (R CMD check), take a look at your NAMESPACE.

You can solve this by adding the following statement to the NAMESPACE:

exportPattern("^[^\\\\.]")

This exports everything that doesn't start with a dot ("."). This allows you to have your hidden functions, starting with a dot:

.myHiddenFunction <- function(x) cat("my hidden function")

I had the error

Error: could not find function some.function

happen when doing R CMD check of a package I was making with RStudio. I found adding

exportPattern(".")

to the NAMESPACE file did the trick. As a sidenote, I had initially configured RStudio to use ROxygen to make the documentation -- and selected the configuration where ROxygen would write my NAMESPACE file for me, which kept erasing my edits. So, in my instance I unchecked NAMESPACE from the Roxygen configuration and added exportPattern(".") to NAMESPACE to solve this error.


This error can occur even if the name of the function is valid if some mandatory arguments are missing (i.e you did not provide enough arguments).
I got this in an Rcpp context, where I wrote a C++ function with optionnal arguments, and did not provided those arguments in R. It appeared that optionnal arguments from the C++ were seen as mandatory by R. As a result, R could not find a matching function for the correct name but an incorrect number of arguments.

Rcpp Function : SEXP RcppFunction(arg1, arg2=0) {}
R Calls :
RcppFunction(0) raises the error
RcppFunction(0, 0) does not


Rdocumentation.org has a very handy search function that - among other things - lets you find functions - from all the packages on CRAN, as well as from packages from Bioconductor and GitHub.

enter image description here


If you are using parallelMap you'll need to export custom functions to the slave jobs, otherwise you get an error "could not find function ".

If you set a non-missing level on parallelStart the same argument should be passed to parallelExport, else you get the same error. So this should be strictly followed:

parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")

You may be able to fix this error by name spacing :: the function call

comparison.cloud(colors = c("red", "green"), max.words = 100)

to

wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)

I got the same, error, I was running version .99xxx, I checked for updates from help menu and updated My RStudio to 1.0x, then the error did not come

So simple solution, just update your R Studio

참고URL : https://stackoverflow.com/questions/7027288/error-could-not-find-function-in-r

반응형