Ошибка: не удалось найти функцию … в R

Это вопрос FAQ, поэтому, пожалуйста, будьте как можно полнее. Ответ – это ответ сообщества, поэтому не стесняйтесь редактировать, если вы считаете, что чего-то не хватает.

Этот вопрос обсуждался и утверждался по мета.

Я использую R и пробовал some.function но я получил следующее сообщение об ошибке:

 Error: could not find function "some.function" 

Этот вопрос возникает очень регулярно. Когда вы получите этот тип ошибки в R, как вы можете его решить?

10 Solutions collect form web for “Ошибка: не удалось найти функцию … в 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 в пакете findFn как описано в этом ответе .
  4. RSiteSearch("some.function") или поиск с помощью rseek – альтернативные способы поиска функции.

Иногда вам нужно использовать более старую версию R, но запустить код, созданный для более новой версии. Однако новые функции (например, hasName в R 3.4.0) не будут найдены. Если вы используете более старую версию R и хотите использовать более новую функцию, вы можете использовать backports пакета, чтобы сделать такие функции доступными. Вы также можете найти список функций, которые необходимо резервировать в репозитории git backports . Имейте в виду, что версии R старше R3.0.0 несовместимы с пакетами, созданными для версий 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, ...)  

Таким образом, мы можем теперь называть это напрямую, используя:

 > stats:::plot.prcomp(mod) 

Я использовал plot.prcomp как пример для иллюстрации цели. При нормальном использовании вы не должны вызывать методы S3, подобные этому. Но, как я уже сказал, если функция, которую вы хотите вызвать, существует (например, это может быть скрытая функция полезности), но она находится в пространстве имен, R сообщит, что она не может найти функцию, если вы не укажете, какое пространство имен должно выглядеть в.

Обычно я могу решить эту проблему, когда компьютер находится под моим контролем, но это больше неприятно при работе с сеткой. Когда grid не является однородной, не все библиотеки могут быть установлены, и мой опыт часто заключался в том, что пакет не был установлен, потому что зависимость не была установлена. Чтобы решить эту проблему, я проверю следующее:

  1. Установлен ли Fortran? (Ищите «gfortran».) Это влияет на несколько основных пакетов в R.
  2. Установлена ​​ли Java? Правильны ли пути Java-classов?
  3. Убедитесь, что пакет был установлен администратором и доступен для использования соответствующим пользователем. Иногда пользователи устанавливают пакеты в неправильном месте или запускают без соответствующего доступа к соответствующим библиотекам. .libPaths() – хорошая проверка.
  4. Проверьте результаты ldd для R, чтобы узнать об общих библиотеках
  5. Хорошо периодически запускать скрипт, который просто загружает каждый необходимый пакет и делает небольшой тест. Это улавливает проблему пакета как можно раньше в рабочем процессе. Это похоже на сборку тестирования или модульного тестирования, за исключением того, что это больше похоже на тест на дым, чтобы убедиться, что работает самый простой материал.
  6. Если пакеты можно хранить в доступном для сети месте, не так ли? Если они не могут, существует ли способ обеспечить согласованные версии машин? (Это может показаться OT, но правильная установка пакета включает в себя наличие правильной версии.)
  7. Доступен ли пакет для данной ОС? К сожалению, не все пакеты доступны на разных платформах. Это вернется к шагу 5. Если возможно, попробуйте найти способ обработки другой ОС, переключившись на соответствующий вкус пакета или отключите зависимость в определенных случаях.

Столкнувшись с этим совсем немного, некоторые из этих шагов становятся довольно рутинными. Хотя # 7 может показаться хорошей отправной точкой, они перечислены в приблизительном порядке частоты, которую я им использую.

Если это происходит, когда вы проверяете свой пакет (проверка R CMD), взгляните на свой NAMESPACE.

Вы можете решить эту проблему, добавив следующую инструкцию в NAMESPACE:

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

Это экспортирует все, что не начинается с точки («.»). Это позволяет вам иметь свои скрытые функции, начиная с точки:

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

У меня была ошибка

Ошибка: не удалось найти функцию some.function

происходят при выполнении проверки R CMD пакета, который я делал с RStudio. Я нашел добавление

exportPattern ( “”)

к файлу NAMESPACE сделал трюк. В качестве оповещения я первоначально настроил RStudio на использование ROxygen для создания документации – и выбрал конфигурацию, в которой ROxygen записывал бы мой файл NAMESPACE для меня, который продолжал стирать мои изменения. Итак, в моем экземпляре я снял флажок NAMESPACE из конфигурации Roxygen и добавил 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.

введите описание изображения здесь

Если вы используете parallelMap вам нужно экспортировать пользовательские функции в подчиненные задания, иначе вы получите сообщение об ошибке «не удалось найти функцию».

Если вы установите непустой уровень на parallelStart тот же аргумент должен быть передан в parallelExport , иначе вы получите ту же ошибку. Поэтому это должно строго соблюдаться:

 parallelStart(mode = "", N, level = "") parallelExport("", level = "") 

Вы можете исправить эту ошибку по имени spacing :: вызов функции

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

в

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

Я получил то же самое, ошибка, я запускал версию .99xxx, я проверял обновления из меню справки и обновил My RStudio до 1.0x, затем ошибка не появилась

Простое решение, просто обновите свою R Studio

  • Функция возвращает None без оператора return
  • Как ключевые слова IMMUTABLE, STABLE и VOLATILE влияют на поведение функции?
  • Является ли часть возвращаемого типа сигнатурой функции?
  • 'foo' не был объявлен в этой области c ++
  • Почему std :: function не равнозначно сопоставимо?
  • Вычисление перекрестного произведения двух векторов в Fortran 90
  • Вложенная функция в C
  • Как создать пользовательскую функцию EL для вызова статического метода?
  • Функция Excel для создания SQL-подобных запросов в данных рабочего листа?
  • Написание собственной функции квадратного корня
  • Как я могу создать функцию с обработчиком завершения в Swift?
  • Давайте будем гением компьютера.