Как создать массив уникальных значений UUID, используя R? - PullRequest
2 голосов
/ 27 сентября 2019

Я хочу создать фрейм данных, полный значений UUID.Очевидно, что каждый UUID в кадре данных должен быть уникальным.Кроме того, мое конечное использование требует, чтобы каждое значение UUID было заключено в фигурные скобки (например: {e681b500-dafb-11e9-9912-1319dd65aab1}).

Я использую пакет uuid .К сожалению, я обнаружил, что в некоторых сценариях команда UUIDgenerate () не генерирует уникальные значения UUID.

Приведенный ниже код инициализирует фрейм данных нужного размера, а затем использует дляцикл для вызова UUIDgenerate () для каждого индекса в кадре данных.Я вызвал команду в команде paste (), чтобы заключить каждое значение UUID в фигурные скобки.

library('uuid')

NoOfRows = 5
NoOfCols = 150
df_UUIDs = data.frame(matrix(ncol=NoOfCols,nrow=NoOfRows))

for (i in c(1:NoOfRows)){
    for (j in c(1:NoOfCols)){
        df_UUIDs[i,j] = paste("{",UUIDgenerate(FALSE),"}",sep="")
    }
} 

Приведенный выше код успешно генерирует фрейм данных, полный UUID, заключенных в фигурные скобки, но не все значенияуникальный!

Чтобы показать это, приведенный ниже код подсчитывает количество записей в кадре данных, а затем подсчитывает количество уникальных значений в кадре данных.Тест показывает, что код выше генерирует только между 2-38 уникальными UUID, когда должно быть 750.

library('dplyr')
dim(as.data.frame(unlist(df_UUIDs)))[1]
dim(distinct(as.data.frame(unlist(df_UUIDs))))[1]

Вот несколько дополнительных подсказок:

  1. Количество уникальных значенийгенерируется по-разному каждый раз, когда я запускаю код
  2. Ошибка не возникает, когда аргумент use.time = TRUE
  3. Ошибка не возникает, если команда paste () опущена
  4. Хотя эта ошибка возникает на моем компьютере (R 3.6.1, Windows, x86-64), она не возникает при тестировании в другом месте, например rdrr.io (R 3.4.4, linux-gnu, x86_64).

Встречались ли другие похожие проблемы с UUIDgenerate ()?У кого-нибудь есть идея, почему возникнет ошибка?

...