Ошибка: не удалось найти функцию … в 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 в пакете 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

  • Что более эффективно: вернуть значение против Pass by reference?
  • Локальная функция vs Lambda C # 7.0
  • Почему C ++ не поддерживает функции, возвращающие массивы?
  • в c: func (void) vs. func ()
  • Почему в параметрах C ++ последнее значение должно быть добавлено последними?
  • Использование boost-streamа и нестатической функции classа
  • Размер X, Y для массива в функции C
  • «Срок службы» строкового литерала в C
  • Почему нам нужно использовать `int main`, а не` void main` в C ++?
  • Как я могу сортировать несколько массивов на основе отсортированного порядка другого массива
  • Определить имена таблиц и столбцов в качестве аргументов в функции plpgsql?
  • Давайте будем гением компьютера.