Это вопрос к часто задаваемым вопросам, поэтому, пожалуйста, будьте как можно полнее. Ответ - это ответ сообщества, поэтому не стесняйтесь редактировать, если считаете, что чего-то не хватает.
Я использую R и попытался, some.function
но я получил следующее сообщение об ошибке:
Error: could not find function "some.function"
Этот вопрос поднимается очень регулярно. Когда вы получаете этот тип ошибки в R, как вы можете ее решить?
r
function
error-handling
r-faq
Joris Meys
источник
источник
R
команда не выполняется, ноq()
! Совет будет с благодарностью!Ответы:
Есть несколько вещей, которые вы должны проверить:
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 сказала, что у меня нет библиотек для обновления.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
ниhttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
«введено в R 3.4.0», я решил выяснить это, просматривая репозитории github и просматриваяblame
для utils / R / hasName.R и base / R / match.RRSiteSearch("hasName")
и получить ту же информацию. Вот почему я добавил это несколько лет назад к этому ответу. Это полезный трюк, чтобы знать ;-)Другая проблема в присутствии NAMESPACE заключается в том, что вы пытаетесь запустить неэкспортированную функцию из пакета foo .
Например (надуманный, я знаю, но):
Во-первых, вы не должны вызывать методы S3 напрямую, но давайте предположим, что это
plot.prcomp
была действительно полезная внутренняя функция в пакете foo . Для вызова такой функции, если вы знаете, что делаете, требуется использование:::
. Вам также необходимо знать пространство имен, в котором находится функция. Используя,getAnywhere()
мы находим, что функция находится в статистике пакета :Теперь мы можем вызвать его напрямую, используя:
Я использовал
plot.prcomp
только в качестве примера, чтобы проиллюстрировать цель. При обычном использовании вы не должны вызывать такие методы S3. Но, как я уже сказал, если функция, которую вы хотите вызвать, существует (например, это может быть скрытая служебная функция), но находится вnamespace
, R сообщит, что не может найти функцию, если вы не укажете ей, в каком пространстве имен искать. ,Сравните это со следующим:
stats::plot.prcomp
вышеописанное не помогает, потому что, хотя оноstats
используетсяplot.prcomp
, оно не экспортируется,stats
как правильно говорит нам ошибка:Это задокументировано следующим образом:
источник
could not find function "anova.lm"
... исправлено с вызовомstats:::anova.lm()
вместо:::
было упомянуто как ошибка проектирования, и это::
является предпочтительным. Не могу легко найти ссылку.::
и:::
являются различными и ваша правка не работает !plot.prcomp()
Функция не экспортируется из пространства имен статистики , так что вы должны использовать:::
.Обычно я могу решить эту проблему, когда компьютер находится под моим контролем, но это больше неприятно при работе с сеткой. Когда сетка неоднородна, не все библиотеки могут быть установлены, и мой опыт часто заключался в том, что пакет не был установлен, потому что не была установлена зависимость. Для решения этой проблемы я проверяю следующее:
.libPaths()
это хорошая проверка.ldd
результаты на R, чтобы быть уверенным в общих библиотекахСтолкнувшись с этим совсем немного, некоторые из этих шагов становятся довольно рутинными. Хотя № 7 может показаться хорошей отправной точкой, они перечислены в приблизительном порядке частоты, с которой я их использую.
источник
Если это происходит во время проверки вашего пакета (R CMD check), взгляните на NAMESPACE.
Вы можете решить эту проблему, добавив следующее утверждение в NAMESPACE:
Это экспортирует все, что не начинается с точки ("."). Это позволяет вам иметь скрытые функции, начиная с точки:
источник
У меня была ошибка
случается, когда я делаю проверку 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 Calls: выдает
RcppFunction(0)
ошибкуRcppFunction(0, 0)
неисточник
Rdocumentation.org имеет очень удобную функцию поиска, которая, среди прочего, позволяет вам находить функции - из всех пакетов в CRAN, а также из пакетов из Bioconductor и GitHub.
источник
Если вы используете,
parallelMap
вам нужно будет экспортировать пользовательские функции в подчиненные задания, в противном случае вы получите сообщение об ошибке «не удалось найти функцию».Если вы установили непропущенный уровень для
parallelStart
того же аргумента, который должен быть переданparallelExport
, в противном случае вы получите ту же ошибку. Так что это должно строго соблюдаться:источник
Вы можете исправить эту ошибку , указав интервал имени :: вызов функции
в
источник
Я получил то же самое, ошибка, у меня была запущена версия .99xxx, я проверил обновления в меню справки и обновил My RStudio до 1.0x, тогда ошибка не пришла
Это простое решение, просто обновите вашу R Studio
источник