Это вопрос FAQ, поэтому, пожалуйста, будьте как можно полнее. Ответ - это ответ сообщества, поэтому не стесняйтесь редактировать, если вы считаете, что чего-то не хватает.
Я использую R и пробовал some.function
но я получил следующее сообщение об ошибке:
Error: could not find function "some.function"
Этот вопрос возникает очень регулярно. Когда вы получите этот тип ошибки в R, как вы можете его решить?
Есть несколько вещей, которые вы должны проверить:
install.packages("thePackage")
(это нужно сделать только один раз)require(thePackage)
или library(thePackage)
(это следует делать каждый раз, когда вы начинаете новый сеанс R)Если вы не уверены, в каком пакете находится эта функция, вы можете сделать несколько вещей.
help.search("some.function")
или ??some.function
чтобы получить информационное окно, в котором можно указать, в каком пакете он содержится.find
и getAnywhere
также могут быть использованы для поиска функций.findFn
в sos
пакете, как описано в этом ответе.RSiteSearch("some.function")
или поиск с помощью rdocumentation или rseek являются альтернативными способами поиска функции.Иногда вам нужно использовать более старую версию R, но запускать код, созданный для более новой версии. Недавно добавленные функции (например, hasName в R 3.4.0) не будут найдены. Если вы используете более старую версию R и хотите использовать более новую функцию, вы можете использовать обратные порты пакета, чтобы сделать такие функции доступными. Вы также найдете список функций, которые необходимо перенести в репозиторий git. Имейте в виду, что версии R старше R3.0.0 несовместимы с пакетами, созданными для R3.0.0 и более поздних версий.
hasName
функцию в utils
. Тем не менее, я использовал 3.3.1 и hasName
не был представлен до 3.4.0. Поскольку вы не можете обновить utils
как автономную библиотеку, R / R Studio сказала, что у меня нет библиотек для обновления.
Другая проблема, при наличии 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, подобные этому. Но, как я уже сказал, если функция, которую вы хотите вызвать, существует (например, это может быть скрытая функция полезности), но она находится в пространстве имен, R сообщит, что она не может найти функцию, если вы не укажете, какое пространство имен должно выглядеть в.
could not find function "anova.lm"
... исправлено с помощью вызова stats:::anova.lm()
Обычно я могу решить эту проблему, когда компьютер находится под моим контролем, но это больше неприятно при работе с сеткой. Когда сетка не является однородной, не все библиотеки могут быть установлены, и мой опыт часто заключался в том, что пакет не был установлен, потому что зависимость не была установлена. Чтобы решить эту проблему, я проверю следующее:
.libPaths()
- хорошая проверка.ldd
результаты для R, чтобы убедиться в общих библиотекахПоняв это довольно много, некоторые из этих шагов становятся довольно рутинными. Хотя # 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, где я написал С++-функцию с опциональными аргументами и не предоставил эти аргументы в R. Похоже, что опциональные аргументы из С++ были замечены как обязательные R. В результате R не смог найти соответствующая функция для правильного имени, но неправильное количество аргументов.
Функция Rcpp: SEXP RcppFunction(arg1, arg2=0) {}
R звонки: RcppFunction(0)
вызывает ошибку RcppFunction(0, 0)
не
Rdocumentation.org имеет очень удобную функцию поиска, которая, среди прочего, позволяет находить функции - из всех пакетов на CRAN, а также из пакетов Bioconductor и GitHub.
Если вы используете parallelMap
, вам нужно экспортировать пользовательские функции в подчиненные задания, иначе вы получите сообщение об ошибке "не удалось найти функцию".
Если вы установили не пропущенный уровень на parallelStart
, тот же аргумент должен быть передан в parallelExport
, иначе вы получите ту же ошибку. Поэтому это должно строго соблюдаться:
parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.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