2016-08-22 3 views
6

Я создаю пакет R, который я планирую отправить в CRAN. Как проверить, конфликтует ли какое-либо из моих имен функций с именами функций в пакетах уже на CRAN? Прежде чем мой пакет станет общедоступным, все же легко изменить имена функций, и я хотел бы быть хорошим гражданином и избегать конфликтов там, где это возможно.Проверьте, используется ли имя функции в существующих пакетах CRAN.

Например, the packages MASS and dplyr both have functions called "select". Я бы хотел избежать такого столкновения.

+0

Похожая (но не совсем ответ): [список функций пакета] (HTTP: // ул ackoverflow.com/questions/22488645/list-of-functions-of-a-package) – Tensibai

+2

На мой взгляд, это не огромная сделка, чтобы иметь имена функций, совместно используемые с другими пакетами. Хорошие методы программирования могут легко избежать конфликтов. Кроме того, количество функций в пакетах CRAN огромно, и проверка их всех может быть очень утомительной. Я просто попытаюсь использовать не очень распространенные слова и имена функций пакета «base» (и других базовых пакетов, таких как «статистика»). Я думаю, этого должно быть достаточно. – nicola

+3

Я согласен в основном с @nicola, я бы добавил, что если есть несколько пакетов, которые, по вашему мнению, могут быть загружены с вашими, вероятно, стоит попытаться избежать конфликтов с функциями в этих пакетах. – joran

ответ

6

Есть много пакетов (9008 на момент, август 2016 года), поэтому почти наверняка лучше посмотреть только на подмножество, с которым вы хотите избежать столкновений. Кроме того, чтобы еще раз подчеркнуть некоторые хорошие советы в комментариях (только для записи в случае комментариев удаляются, или скрытый):

  1. имена функций обмена с другими пакетами на самом деле не является большой проблемой, а не избегать столкновений с общими пакетами, которые, скорее всего, будут загружены в одно и то же время (спасибо @Nicola и @Joran)
  2. Не обойтись без повторного использования имен «приводит к неправильным именам функций, потому что хорошие приняты»(@Konrad Rudolph)

Но, если вы действительно покупке проверить все пакеты, возможно, по крайней мере, знать, какие пакеты используют одни и те же имена, как ваша, вы можете получить вектор имен пакетов по

crans <- available.packages()[, "Package"] 
#   A3  abbyyR   abc ABCanalysis  abc.data  abcdeFBA 
#   "A3"  "abbyyR"   "abc" "ABCanalysis" "abc.data" "abcdeFBA" 
length(crans) 
# [1] 9008 

Вы можете установить их в объеме, используя

N = 4 # only using the 1st 4 packages here - 
     # doing it for the whole lot will take a lot of time and disk space!!! 
install.packages(crans[1:N]) 

Тогда вы можете получить список имен функций в этих пакетах с

existing_functions = sapply(1:N, function(i) ls(getNamespace(crans[i]))) 
+0

, вероятно, проще обходить https://cloud.opencpu.org/ocpu/test/, у которого уже установлены все пакеты и предоставляет их в удобном для сканирования режиме, например. https://cloud.opencpu.org/ocpu/library/dplyr/R/ – Ruben

 Смежные вопросы

  • Нет связанных вопросов^_^