Прочитав ответы, похоже, что abbreviate
не было создано для того, что я хотел Принимая предложение @ akrun, я написал функцию-обертку для создания уникальных сокращений.
Улучшения приветствуются !!
btrAbbreviate = function(x, maxlen) {
x = tolower(x)
res = abbreviate(x, minlength = maxlen, strict = TRUE)
dups = res[duplicated(res)]
dupsChk = length(dups)
while (dupsChk != 0) {
firstChar = stringr::str_sub(names(dups), 1, 1)
shfl = stringi::stri_rand_shuffle(substring(names(dups), 2))
shfl = paste0(firstChar, shfl)
out = stringr::str_sub(shfl, 1, 2)
names(out) = names(dups)
res[names(out)] = out
dups = res[duplicated(res)]
dupsChk = length(dups)
}
return(res)
}
x = state.name
btrAbbreviate(x, maxlen = 2)