首页 > 解决方案 > 如何使用 R 生成唯一 UUID 值的数组?

问题描述

我想创建一个充满 UUID 值的数据框。显然,数据框中的每个 UUID 都应该是唯一的。此外,我的最终用途要求将每个 UUID 值括在大括号中(例如:{e681b500-dafb-11e9-9912-1319dd65aab1})。

我正在使用包uuid。不幸的是,我发现在某些情况下,命令UUIDgenerate()不会生成唯一的 UUID 值。

下面的代码初始化所需大小的数据帧,然后使用 for 循环为数据帧中的每个索引调用 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() 类似的问题?有谁知道为什么会发生错误?

标签: ruuid

解决方案


推荐阅读