Ошибка: не удалось найти функцию … в R
Это вопрос FAQ, поэтому, пожалуйста, будьте как можно полнее. Ответ – это ответ сообщества, поэтому не стесняйтесь редактировать, если вы считаете, что чего-то не хватает.
Этот вопрос обсуждался и утверждался по мета.
Я использую R и пробовал some.function
но я получил следующее сообщение об ошибке:
- Встроенная функция связи
- Что такое «статическая» функция?
- Как я могу получить список всех функций, хранящихся в базе данных конкретной схемы в PostgreSQL?
- Вызов библиотеки C ++ в C #
- Почему C-массив имеет неправильное значение sizeof (), когда он передается функции?
Error: could not find function "some.function"
Этот вопрос возникает очень регулярно. Когда вы получите этот тип ошибки в R, как вы можете его решить?
- Заполните непересекающиеся пустые ячейки со значением из ячейки над первым пробелом
- Как сравнить функции?
- Как вернуть строковое значение из функции Bash
- Что эквивалентно Regex-replace-with-function-оценке в Java 7?
- C sizeof пройденного массива
- Использование нескольких .cpp-файлов в c ++-программе?
- strdup () - что он делает в C?
- Вызвать функцию, названную в строковой переменной в C
Есть несколько вещей, которые вы должны проверить:
- Вы правильно указали название своей функции? Имена чувствительны к регистру.
- Вы установили пакет, содержащий функцию?
install.packages("thePackage")
(это нужно сделать только один раз) - Вы прикрепляли этот пакет к рабочему пространству?
require(thePackage)
илиlibrary(thePackage)
(это нужно делать каждый раз, когда вы начинаете новый сеанс R) - Используете ли вы более старую версию R, где эта функция еще не существует?
Если вы не уверены, в каком пакете находится эта функция, вы можете сделать несколько вещей.
- Если вы уверены, что вы установили и подключили / загрузили нужный пакет, введите
help.search("some.function")
или «??some.function
чтобы получить информационное окно, которое может сообщить вам, в каком пакете он содержится. -
find
иgetAnywhere
также могут использоваться для поиска функций. - Если вы не имеете понятия о пакете, вы можете использовать
findFn
в пакетеfindFn
как описано в этом ответе . -
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 не является однородной, не все библиотеки могут быть установлены, и мой опыт часто заключался в том, что пакет не был установлен, потому что зависимость не была установлена. Чтобы решить эту проблему, я проверю следующее:
- Установлен ли Fortran? (Ищите «gfortran».) Это влияет на несколько основных пакетов в R.
- Установлена ли Java? Правильны ли пути Java-classов?
- Убедитесь, что пакет был установлен администратором и доступен для использования соответствующим пользователем. Иногда пользователи устанавливают пакеты в неправильном месте или запускают без соответствующего доступа к соответствующим библиотекам.
.libPaths()
– хорошая проверка. - Проверьте результаты
ldd
для R, чтобы узнать об общих библиотеках - Хорошо периодически запускать скрипт, который просто загружает каждый необходимый пакет и делает небольшой тест. Это улавливает проблему пакета как можно раньше в рабочем процессе. Это похоже на сборку тестирования или модульного тестирования, за исключением того, что это больше похоже на тест на дым, чтобы убедиться, что работает самый простой материал.
- Если пакеты можно хранить в доступном для сети месте, не так ли? Если они не могут, существует ли способ обеспечить согласованные версии машин? (Это может показаться OT, но правильная установка пакета включает в себя наличие правильной версии.)
- Доступен ли пакет для данной ОС? К сожалению, не все пакеты доступны на разных платформах. Это вернется к шагу 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