#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 тыс.), Но я подозреваю, что они все равно не разрешат совпадающие имена.