Я бы подумал, что это можно немного обобщить, чтобы оставить место для вызывающей функции, чтобы она могла при необходимости заниматься другими вещами. Я думаю, замена подстроки на месте дает некоторые интересные возможности.
Вот предложение, которое заменит удобочитаемые числа на длинные числа столько раз, сколько они могут появляться в любом количестве строк, которое вы передаете ему.
Это определенно не меньше и не быстрее, чем ваше существующее решение, но его можно использовать и другими способами. пытается сохранить пробелы внутри и вокруг числа / единицы.
Если вам интересно, я вывел known
с
# adapted from utils:::format.object_size
known_units <- list(
SI = c("B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"),
IEC = c("B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"),
legacy = c("b", "Kb", "Mb", "Gb", "Tb", "Pb"),
LEGACY = c("B", "KB", "MB", "GB", "TB", "PB"))
known_bases <- c(SI = 1000, IEC = 1024, legacy = 1024, LEGACY = 1024)
known <- Map(function(un, ba) setNames(ba^(seq_along(un)), un),
known_units, known_bases)
for (i in seq_along(known)[-1]) {
nms <- names(known[[i]])
known[[i]] <- known[[i]][ nms[ ! nms %in% unlist(lapply(known[1:(i-1)], names)) ] ]
}
known <- unlist(unname(known))
Возможно, Kludgy, но я знаю, могу ли я не делал это программно, я бы пропустил запятую или что-то в этом роде.
Расширение этой функции может принимать некоторые format
-подобные аргументы, такие как big.mark=
, small.mark=
, и c. А еще лучше в качестве сопутствующей функции, которая «находит» числа (предположительно после вызова этой функции) и вставляет запятые, et c.