Имена доступных R-пакетов
Я очень хочу знать,
- сколько имен пакетов в CRAN имеет два, три, N символа?
- какие комбинации еще не использовались ( "непопулярный" )
- сколько имен пакетов использует full-caps или camelCase?
- сколько имен пакетов заканчивается на 2?
Я думаю, что это может показать некоторые интересные факты.
Изменить: бонусные баллы для анимированной графики, показывающие эволюцию времени пакетов CRAN.
Ответы
Ответ 1
Лучше, чем очищать веб-страницу, чтобы получить имена пакетов, использовать функцию available.packages()
и обрабатывать эти результаты. available.packages()
возвращает матрицу, содержащую сведения обо всех доступных пакетах (но по умолчанию фильтруется — более подробно см. раздел "Подробности" ?available.packages
).
pkgs <- available.packages(filters = "duplicates")
nameCount <- unname(nchar(pkgs[, "Package"]))
table(nameCount)
> table(nameCount)
nameCount
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
32 311 374 360 434 445 368 277 199 132 99 56 56 43 22 19 18 2 12 8
22 24 25 31
5 2 1 1
Используя nameCount
, мы можем выбирать пакеты с именами, содержащими любое количество символов, без необходимости прибегать к регулярному выражению и т.д.:
> unname(pkgs[which(nameCount == 2), "Package"])
[1] "BB" "bs" "ca" "cg" "dr" "ez" "FD" "ff" "HH" "HI" "iv" "JM" "ks" "M3" "mi"
[16] "np" "oc" "oz" "PK" "PP" "qp" "QT" "RC" "rv" "Rz" "sm" "sn" "sp" "st" "SV"
[31] "tm" "wq"
Ответ 2
здесь один снимок, основанный на различных предложениях.
packages <- available.packages()[,'Package']
ggplot(data.frame(n = nchar(packages))) +
geom_histogram(aes(n), binwidth=1)
![histogram]()
all <- length(packages)
## 3168
up <- sum(toupper(packages) == packages)
## 262
low <- sum(tolower(packages) == packages)
## 1697
pie(c(up, low, all-up-low), labels=c("UPPERCASE","lowercase","cAmElCaSe"))
![pie]()
let <- sapply(sapply(letters, grep, tolower(packages)), length)
barplot(let)
![barplot]()
length(packages[grep("2$", packages, perl=TRUE)])
# 29
Ответ 3
Вот короткая часть кода, чтобы ответить на некоторые вопросы. Я буду продолжать добавлять свой ответ, когда найду время.
library(XML); library(ggplot2);
url = 'http://cran.r-project.org/web/packages/available_packages_by_name.html'
packages = readHTMLTable(url, stringsAsFactors = F)[[1]][-1,]
# histogram of number of characters in package name
qplot(nchar(V1), data = packages)
Ответ 4
Сделайте вектор всех пакетов, используя
myList <- available.packages()[,'Package']
Затем вы можете анализировать, как хотите. Например, список пакетов с двумя именами символов
myList[grep('^..$', myList)]