Установка пакета без учета регистра (игнорирование регистра) при установке пакетов

#r #package #case-insensitive #install.packages #ignore-case

#r #пакет #без учета регистра #install.packages #игнорировать регистр

Вопрос:

Есть ли какой-либо способ игнорировать регистр или включить чувствительность к регистру при установке пакетов.

Пример, RWeka пакет. Можно ли установить его как install.packages("rweka") или как-то установить ignore.case = TRUE , но нет такого аргумента, чтобы install.packages()

Комментарии:

1. Теоретически может быть два пакета RWeka и rweka (хотя CRAN этого не допустит). Однако вам это не нужно.

Ответ №1:

Имена пакетов чувствительны к регистру. Поэтому вы можете не получить уникальное совпадение, если проигнорируете регистр. Сказав это, лучший способ добиться того, чего вы хотите, это:

 #get list of packages
packages <- available.packages()[,"Package"]
#find matches by ignoring case
my_packs <- packages[grep("^rweka$",packages,ignore.case=TRUE)]
#install - beware of multiple matches
install.packages(my_packs)
  

Обратите внимание, что регулярное выражение в grep указывает начало и конец строки, в противном случае вы можете получить еще больше пакетов, содержащих то, что вы хотите, в качестве подстроки.

Ответ №2:

Вы можете увеличить R с помощью:

 install_p <- function(x) {
  av <- available.packages()
  av <- setNames(av[,"Package"], tolower(av[,"Package"]))
  install.packages(av[x])
}
  

в вашем ~/.Rprofile и это будет безопасно сделать:

 install_p("rweka")
  

поскольку:

 sum(duplicated(tolower(unname(av[,"Package"]))))
  

0 как отметил Роланд в своем комментарии.

CRAN может ослаблять свои собственные внутренние политики по мере роста объема пакетов R (сейчас он составляет около 10 тыс.), Но я подозреваю, что они все равно не разрешат совпадающие имена.