Алгоритмы синхронизации

Короткий вариант: используйте formatC или sprintf .


Более длинная версия:

Существует несколько функций для форматирования чисел, включая добавление ведущих нулей. Какой из них лучше всего зависит от того, какое другое форматирование вы хотите сделать.

Пример из вопроса довольно прост, так как все значения имеют одинаковое количество цифр, поэтому давайте попробуем более жесткий пример что делает мощность 10 шириной 8.

anim <- 25499:25504
x <- 10 ^ (0:5)

paste (и его вариант paste0) часто являются первыми функциями манипуляции с строками, с которыми вы сталкиваетесь , Они не предназначены для управления числами, но они могут быть использованы для этого. В простом случае, когда нам всегда нужно добавить один ноль, paste0 - лучшее решение.

paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"

В случае, когда число цифр в цифрах имеет переменное число, вы должны вручную подсчитайте, сколько нулей нужно добавить, что достаточно ужасно, что вы должны делать это только из-за болезненного любопытства.


str_pad из stringr работает аналогично paste, что делает более явным то, что вы хотите проложить вещи.

library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"

Опять же, он не предназначен для использования с числами, поэтому для более сложного случая нужно немного подумать. Мы должны просто сказать «pad с нулями до ширины 8», но посмотрите на этот вывод:

str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"

Вам нужно установить опцию

str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"

для научного штрафа , чтобы

library(withr)
with_options(
  c(scipen = 999), 
  str_pad(x, 8, pad = "0")
)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"

stri_pad в stringi работает точно так же, как str_pad из stringr ].


formatC является интерфейсом функции C printf . Использование этого требует некоторого знания арканы этой основной функции (см. Ссылку). В этом случае важными являются аргументы width, format - "d" для «integer» и "0" flag для добавочных нулей.

formatC(anim, width = 6, format = "d", flag = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
formatC(x, width = 8, format = "d", flag = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"

Это мое любимое решение, так как легко изменить во времени с изменением ширины, и эта функция достаточно мощная, чтобы сделать другие изменения форматирования.


sprintf - это интерфейс к функции C с тем же именем; например formatC, но с другим синтаксисом.

sprintf("%06d", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
sprintf("%08d", x)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"

Основным преимуществом sprintf является то, что вы можете вставлять форматированные числа в более длинные фрагменты текста.

sprintf(
  "Animal ID %06d was a %s.", 
  anim, 
  sample(c("lion", "tiger"), length(anim), replace = TRUE)
)
## [1] "Animal ID 025499 was a tiger." "Animal ID 025500 was a tiger."
## [3] "Animal ID 025501 was a lion."  "Animal ID 025502 was a tiger."
## [5] "Animal ID 025503 was a tiger." "Animal ID 025504 was a lion." 

См. также товарный ответ .


Для полноты следует упомянуть другие функции форматирования, которые иногда полезны, но не имеют метода добавления нулей.

format , общую функцию для форматирования любого объекта, с методом для чисел. Он работает немного как formatC, но с еще одним интерфейсом.

prettyNum - еще одна функция форматирования, в основном для создания меток галочки с ручной осью. Он особенно хорошо работает для широкого диапазона чисел.

Пакет scales имеет несколько функций, таких как percent , date_format и dollar для специальных типов форматов.

9
задан Kristopher Johnson 18 December 2013 в 15:22
поделиться

4 ответа

SyncML является стандартом для синхронизации данных вещей, обычно связанных с чьим-то персональным организатором. Nokia и Motorola оба использовали его в большой степени несколько лет назад, но я не знаю ее текущее состояние.

iCalendar является календарной спецификацией формата синхронизации, и CalDAV является реализацией iCalendar на протоколе WebDAV. Google ищет iCal, или iCalendar, вероятно, поднимет приложение iCal, предоставленное Apple как часть  Mac OS X. Продолжайте смотреть вниз список результатов, пока Вы не видите что-то, что похоже на протокол.

4
ответ дан 4 December 2019 в 11:45
поделиться

Я думал бы, что рассмотрение любого из приложений управления исходным кодом с открытым исходным кодом даст Вам верную мысль - объединяющиеся изменения между файлами точно, что они делают...

0
ответ дан 4 December 2019 в 11:45
поделиться

Я полагаю, что Сжатие Delta - то, что Вы ищете.

0
ответ дан 4 December 2019 в 11:45
поделиться

Существует высокоуровневый и очень широкий обзор всех алгоритмов синхронизации алгоритмов в Оптимистическая репликация (авторы Ясуши Сайто и Марк Шапиро, формат PDF).

14
ответ дан 4 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: