programing

오류: R에서 함수 ...을(를) 찾을 수 없습니다.

subpage 2023. 6. 28. 21:44
반응형

오류: 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을 사용하고 있습니까?
  5. 특정 패키지의 다른 버전을 사용하고 있습니까?시간이 지남에 따라 기능이 추가되고 제거되며, 참조하는 코드가 설치된 패키지보다 최신 버전 또는 이전 버전의 패키지일 수 있습니다.

해당 기능이 어떤 패키지에 있는지 잘 모르는 경우 몇 가지 작업을 수행할 수 있습니다.

  1. 패키지를 것이 하다면 올른패로키설치를연고결하다드/한것이입니같력합이다음확과실면다하바지로,▁if다▁type▁the니입합력▁and▁youloaded/를 입력합니다.help.search("some.function")또는??some.function어떤 패키지에 들어 있는지 알 수 있는 정보 상자를 가져옵니다.
  2. find그리고.getAnywhere함수를 찾는 데도 사용할 수 있습니다.
  3. 패키지에 대한 단서가 없다면, 당신은 사용할 수 있습니다.findFn에 시대에sos 답변에 설명된 대로 패키지.
  4. RSiteSearch("some.function")또는 r 문서 또는 rsek를 사용하여 검색하는 것이 함수를 찾을 수 있는 대안적인 방법입니다.

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

네임스페이스가 있는 경우 패키지 foo에서 내보내지 않은 함수를 실행하려고 하는 것도 문제입니다.

예를 들어, 나는 알고 있지만, 다음과 같습니다.

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

안 , 첫째, 직3 소메안다음, 되과다가니정합같이만지, ▁firstly▁assume다▁directly▁s니를 가정해 보겠습니다.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 메소드를 이렇게 호출하면 안 됩니다.를 들어 ), ▁a▁the▁but▁in예▁you▁if▁for▁function▁function▁(▁is▁exists경▁wantit우▁but▁be,▁said▁utility다▁hidden▁i있▁as▁call▁to음그▁a는러),과▁example(같상▁might),있음수.namespaceR은 사용자가 검색할 네임스페이스를 지정하지 않으면 함수를 찾을 수 없다고 보고합니다.

과 비교해 : 이를다비보십시오해교.stats::plot.prcomp위의 내용이 실패하는 이유는stats사용하다plot.prcomp에서 .stats그 오류가 우리에게 올바르게 말해주듯이:

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

이는 다음과 같이 문서화되어 있습니다.

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

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

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

이러한 단계 중 일부는 상당히 일상적인 단계가 됩니다.7번은 좋은 출발점처럼 보이지만, 제가 사용하는 빈도의 대략적인 순서대로 나열되어 있습니다.

패키지를 확인하는 동안(RCMD 검사) 이러한 문제가 발생하면 네임스페이스를 살펴봅니다.

네임스페이스에 다음 문을 추가하여 이 문제를 해결할 수 있습니다.

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

점(".")으로 시작하지 않는 모든 항목을 내보냅니다.이렇게 하면 점으로 시작하여 숨겨진 기능을 사용할 수 있습니다.

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

제가 실수를 했어요.

오류: 함수를 찾을 수 없습니다.some.function

RStudio로 만들던 패키지의 RCMD 검사를 할 때 발생합니다.추가하는 것을 찾았습니다.

내보내기 패턴(".")

NAMESPACE 파일에서 이 작업을 수행했습니다.참고로, 저는 처음에 RStudio가 Roxygen을 사용하여 문서를 작성하도록 구성했고, Roxygen이 제 NAMESPACE 파일을 작성할 구성을 선택하여 편집 내용을 계속 지웠습니다.그래서 저는 Roxygen 구성에서 NAMESPACE를 선택 취소하고 이 오류를 해결하기 위해 exportPattern(".")을 NAMESPACE에 추가했습니다.

이 오류는 일부 필수 인수가 누락된 경우(즉, 충분한 인수를 제공하지 않은 경우) 함수 이름이 유효한 경우에도 발생할 수 있습니다.
저는 이것을 Rcpp 컨텍스트에서 얻었는데, 선택적 인수로 C++ 함수를 작성했고, R에 그러한 인수를 제공하지 않았습니다.C++의 선택적 인수는 R에 의해 필수로 간주되는 것으로 나타났습니다.결과적으로, R은 정확한 이름에 대한 일치 함수를 찾을 수 없고 잘못된 인수 수를 찾을 수 없습니다.

함수 : Rcpp 함수:SEXP RcppFunction(arg1, arg2=0) {}
통화R 통화:
RcppFunction(0)시킵니다.
RcppFunction(0, 0) 않음

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

enter image description here

사중인경우를 .parallelMap사용자 지정 함수를 슬레이브 작업으로 내보내야 합니다. 그렇지 않으면 "could not find function"(함수를 찾을 수 없습니다.

수준설경에서 누락되지 parallelStart같은 주장이 에 전달되어야 합니다.parallelExport그렇지 않으면 동일한 오류가 발생합니다.따라서 이를 엄격히 준수해야 합니다.

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

이름 간격 :: 함수 호출을 사용하여 이 오류를 해결할 수 있습니다.

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

로.

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

동일한 오류가 발생했습니다. .99xx 버전을 실행하고 있었습니다. 도움말 메뉴에서 업데이트를 확인하고 My RStudio를 1.0x로 업데이트했습니다. 그러면 오류가 발생하지 않았습니다.

간단한 솔루션입니다. R Studio를 업데이트하기만 하면 됩니다.

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

반응형