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


177

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

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

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

Error: could not find function "some.function"

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


5
당신이이 질문을 닫습니다 투표를하기 전에 먼저 메타에 대한이와 disussion을 읽어 meta.stackexchange.com/questions/101892/...을
Andrie

2
다른 모든 방법이 실패 할 경우, 기본 R 및 설치된 패키지의 소스 코드를 grepping 시도
nullglob

3
@nullglob 그것은 다소 극단적 인 것 같습니다 :-)
Gavin Simpson

나는 관련 질문이 있습니다 : stackoverflow.com/questions/23357551/...를 . 이 경우 모든 R명령이 실패하지만 q()! 조언은 크게 감사하겠습니다!
Aleksandr Blekh

어리석은 일이지만 함수 출력을 함수 자체로 지정하지 않도록주의하십시오. [경험별로 학습 ...]
user3507584

답변:


126

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

  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 이상 버전 용으로 빌드 된 패키지와 호환되지 않습니다.


조리스 안녕하세요, 질문이 있습니다. 나는 R에서 처음이지만 성공적으로 설치할 수있었습니다. 명령 줄의 "천체"패키지에서 "cosvol"기능을 사용하고 싶습니다. Fedora 리포지토리에서 Linux 시스템으로 설치되는 R과 달리 "홈"의 다른 디렉토리에 "천상의"패키지를 다운로드했습니다. "cosvol ()"함수를 요청할 때마다 ""cosdistCoVol "함수를 찾을 수 없습니다"라고 말합니다. 모든 기능이 내 "하늘"패키지에 별도로 다운로드 된 관리자에 대해 R에게 알리는 방법을 잘 모르겠습니다. 당신의 도움에 감사드립니다.
Benjamin

함수가 코어 /베이스 R 라이브러리 중 하나에 있으면 업데이트해야합니다. 제 경우에는의 hasName함수 를 사용하려고 했습니다 utils. 그러나 3.3.1을 사용하고 hasName있었고 3.4.0까지 소개되지 않았습니다. utils독립형 라이브러리로 업데이트 할 수 없으므로 R / R Studio는 업데이트 할 라이브러리가 없다고 말했습니다.
mpag

@mpag utils 패키지가 R 릴리스의 필수 부분이기 때문입니다. RSiteSearch ( "hasName")를 문자 그대로 사용하는 경우 첫 번째 항목은 R 3.3.1에서 해당 기능을 사용할 수 있도록하는 백 포트 패키지에 대한 참조입니다. 자세한 내용은 github.com/r-lib/backports 를 참조하십시오. 이 사건에 대한 정보를 추가했습니다. 알림을위한 thx
Joris Meys

@JorisMeys 매우 유용합니다. 또한 함수의 도움말 페이지에서 함수가 R에 추가 된 경우 (예 :? hasName) 문서화하는 것이 표준 관행이라고 제출하고 싶습니다. 예를 들어 "R 3.4.0에 도입되었습니다"라고 말하지 도 https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName않고 https://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.htmlgithub blame저장소 를 탐색하여 utils / R / hasName.R 및 base / R / match.R을 살펴 보았습니다.
mpag

@mpag 또는 문자 그대로 첫 번째 히트를 열어 RSiteSearch("hasName")동일한 정보를 얻을 수 있습니다. 이것이 내가 몇 년 전에 그 대답에 추가 한 이유입니다. ;-)
Joris Meys

29

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
덕분에 -이에 대한 R 3로 업그레이드 한 후 저를 저장 could not find function "anova.lm"... 호출로 고정 stats:::anova.lm()하는 대신
ErichBSchulz

그와 관련이 없지만 사용은 :::디자인 실수라고하며 이는 ::선호됩니다. 참조를 쉽게 찾을 수 없습니다.
NelsonGon

1
외람된 @NelsonGon, ::하고 :::있는 다른 과 편집하지 않는 ! 이 plot.prcomp()함수 통계 네임 스페이스에서 내 보내지 않으므로을 사용해야 :::합니다.
개빈 심슨

@GavinSimpson 맞아! 나는 디자인 오류에 대한 존경받는 R dev의 말을 가지고 실제로 그것을 확인하지 못했습니다. 아마도 그들의 개인적인 의견 일 것입니다.
NelsonGon

11

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

  1. 포트란이 설치되어 있습니까? ( 'gfortran'을 찾으십시오.) 이는 R의 여러 주요 패키지에 영향을줍니다.
  2. Java가 설치되어 있습니까? Java 클래스 경로가 정확합니까?
  3. 관리자가 패키지를 설치했고 적절한 사용자가 사용할 수 있는지 확인하십시오. 때때로 사용자는 잘못된 장소에 패키지를 설치하거나 올바른 라이브러리에 대한 적절한 액세스없이 실행합니다. .libPaths()좋은 검사입니다.
  4. ldd공유 라이브러리에 대해 확인하기 위해 R에 대한 결과 확인
  5. 필요한 모든 패키지를로드하고 약간의 테스트 만 수행하는 스크립트를 정기적으로 실행하는 것이 좋습니다. 이를 통해 워크 플로에서 가능한 빨리 패키지 문제를 파악합니다. 이것은 기본적인 테스트가 작동하는지 확인하기위한 연기 테스트와 비슷하다는 점을 제외하고 테스트 또는 단위 테스트를 빌드하는 것과 유사합니다.
  6. 패키지를 네트워크 액세스 가능 위치에 저장할 수 있다면 패키지입니까? 그들이 할 수 없다면, 기계 전체에 일관된 버전을 보장 할 수있는 방법이 있습니까? 이것은 OT처럼 보일 수 있지만 올바른 패키지 설치에는 올바른 버전의 가용성이 포함됩니다 .
  7. 지정된 OS에서 패키지를 사용할 수 있습니까? 불행히도 모든 패키지가 플랫폼에서 사용 가능한 것은 아닙니다. 가능하면 패키지의 적절한 특징으로 전환하거나 특정 경우 종속성을 해제하여 다른 OS를 처리하는 방법을 찾으십시오.

이 문제가 발생하면 이러한 단계 중 일부는 상당히 일상적입니다. # 7이 좋은 출발점처럼 보일지 모르지만 이것들은 내가 사용하는 주파수의 대략적인 순서로 나열됩니다.


2
유용한 고려 사항이지만 "패키지를 설치할 때 왜 오류가 발생합니까?"
IRTFM

@DWin : 어쩌면 실제로는 아닙니다. 불분명했을 수도 있습니다. 패키지가 설치되지 않았기 때문에 작업이 그리드에서 중단 될 때 이러한 문제가 발생합니다. 그리드에서 소프트웨어 일관성을 유지하는 것은 어렵지 않지만 설치, 유지 관리 및 디버깅을 위해서는 좋은 프로세스가 필요합니다. 이들은 적어도 기능을 사용할 수 없을 때 나오는 삐걱 거리는 소리와 관련하여 각 단계에서 나오는 항목 중 일부일뿐입니다. :)
반복자

6

패키지를 확인하는 동안 (R CMD 확인)이 문제가 발생하면 NAMESPACE를 살펴보십시오.

NAMESPACE에 다음 명령문을 추가하여이 문제를 해결할 수 있습니다.

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

점으로 시작하지 않는 모든 항목 ( ".")을 내 보냅니다. 이를 통해 점으로 시작하여 숨겨진 기능을 가질 수 있습니다.

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

이것은 RStudio에서 나에게 실패합니다-오류 : '\.' ""^ [^ \. "로 시작하는 문자열에서 인식 할 수없는 이스케이프입니다.
Andrew

1
내가 쓰지 않은 패키지를 사용하는 동안 오류가 발생하면 어떻게 할 수 있습니까? 패키지 자체는 아마도 저자가 위의 작업을 수행하지 않았기 때문에 정의되지 않은 내부 방법을 사용하려고합니다.
Andre Luus 2016 년

4

나는 오류가 있었다

오류 : 기능을 찾을 수 없습니다 some.function

RStudio로 만든 패키지의 R CMD 검사를 수행 할 때 발생합니다. 나는 추가 발견

exportPattern ( ".")

NAMESPACE 파일에 트릭을 수행했습니다. 부수적으로 처음에는 Rxy가 ROxygen을 사용하여 문서를 작성하도록 구성했으며 ROxygen이 NAMESPACE 파일을 작성하는 구성을 선택하여 편집 내용을 계속 지 웠습니다. 따라서 필자의 경우 Roxygen 구성에서 NAMESPACE를 선택 취소하고 exportPattern ( ".")을 NAMESPACE에 추가하여이 오류를 해결했습니다.


1
roxygen2를 사용하는 것이 좋습니다. 네임 스페이스 파일에 대한 편집 내용을 인식하고 그대로 유지합니다. 네임 스페이스 파일에서 exportPattern ( ".")을 사용하지 않는 것이 좋습니다. 개별 파일에 @export 태그를 대신 사용하므로 내보내기가 필요한 기능 만 내 보냅니다. Roxygen2는 자동으로 네임 스페이스를 업데이트하여 내보내기가 필요한 모든 기능을 내 보냅니다.
Joris Meys

1
Joris-시간을내어 의견을 보내 주셔서 감사합니다. 당신이 쓴 것에 100 % 동의합니다. 지금 DevTools로 / roxygen2를 사용하고 모든 기능에 다음을 걸었습니다 I 필요 수출 : # '@export
swihart

4

일부 필수 인수가 누락 된 경우 (즉, 충분한 인수를 제공하지 않은 경우) 함수 이름이 유효한 경우에도이 오류가 발생할 수 있습니다.
나는 Rcpp 컨텍스트에서 이것을 선택 인수로 C ++ 함수를 작성했고 R에서 그 인수를 제공하지 않았습니다 .C ++의 옵션 인수는 R에 의해 의무적 인 것으로 보였습니다. 결과적으로 R은 찾을 수 없었습니다. 올바른 이름이지만 일치하는 인수 수가 일치하는 함수

Rcpp 기능 : SEXP RcppFunction(arg1, arg2=0) {}
R 호출 :
RcppFunction(0)오류
RcppFunction(0, 0)가 발생 하지 않습니다


2

Rdocumentation.org 에는 CRAN의 모든 패키지뿐만 아니라 Bioconductor 및 GitHub의 패키지에서 기능을 찾을 수있는 매우 편리한 검색 기능이 있습니다.

여기에 이미지 설명을 입력하십시오


1

사용중인 경우 parallelMap사용자 정의 기능을 슬레이브 작업으로 내 보내야합니다. 그렇지 않으면 "함수를 찾을 수 없습니다"라는 오류가 발생합니다.

parallelStart동일한 인수 에서 비결 측 레벨을 설정하면에 전달되어야합니다 parallelExport. 그렇지 않으면 동일한 오류가 발생합니다. 따라서이를 엄격히 준수해야합니다.

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

0

이름 간격 으로이 오류를 해결할 수 있습니다 :: 함수 호출

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

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

1
오류는 "비교"대신 "비교"를 나타냅니다. 나는 네임 스페이스가 문제가 아니라고 생각한다 :-)
Joris Meys

좋은 자리 @Joris Meys
Tony Cronin

-1

동일한 오류가 발생했습니다. 버전 .99xxx를 실행 중이며 도움말 메뉴에서 업데이트를 확인하고 내 RStudio를 1.0x로 업데이트 한 후 오류가 발생하지 않았습니다.

간단한 솔루션이므로 R Studio를 업데이트하십시오.


1
자연의 오류에 대해 자세히 설명해 주시겠습니까? 이것은 매우 구체적인 경우에만 도움이 될 수 있습니다.
Joris Meys
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.