如何在 R 中生成 GUID?

Posted

技术标签:

【中文标题】如何在 R 中生成 GUID?【英文标题】:How can I generate a GUID in R? 【发布时间】:2012-05-16 14:16:15 【问题描述】:

如何在 R 中生成 GUID 和 UUID?

我希望能够根据运行 rsession 的机器的硬件等生成 GUID。

不过,作为备用方案,我很乐意创建符合 rfc4122 的 UUID。

是否有可以创建 GUID 的包?否则,是否有人有一些与 RFC4122 兼容的 UUID 代码?

【问题讨论】:

【参考方案1】:

我对 UUID 的复杂性一无所知,但是这样的事情可以吗?

baseuuid <- paste(sample(c(letters[1:6],0:9),30,replace=TRUE),collapse="")

paste(
    substr(baseuuid,1,8),
    "-",
    substr(baseuuid,9,12),
    "-",
    "4",
    substr(baseuuid,13,15),
    "-",
    sample(c("8","9","a","b"),1),
    substr(baseuuid,16,18),
    "-",
    substr(baseuuid,19,30),
    sep="",
    collapse=""
)
# result like: "f7bd11ed-fca9-42e5-8c3e-4464cd02e0fa"

这应该符合http://en.wikipedia.org/wiki/Uuid#Version_4_.28random.29

【讨论】:

这对于使用 set.seed 的人来说很危险。 @iShouldUseAName - 我不会真的称之为危险。 R 中的所有随机函数都受到 set.seed 的影响,我无法改变它。 @thelatemail 您可以使用不依赖于 R 内部随机数生成器的工具/提供带有答案的警告。现在几乎可以肯定这是最好的答案:cran.r-project.org/web/packages/uuid/index.html @iShouldUseAName - 几乎可以肯定 - 随时发布它作为答案。我不能时间旅行 - uuid 在这个答案后 7 个月首次发布。 @thelatemail 我不是建议你这样做:)。我知道它是在您回答之后发布的,因此“......现在的最佳答案”中的“现在”。只需为寻求解决方案的后代 R 用户添加该评论。我将添加uuid 包解决方案作为单独的答案。【参考方案2】:

Bioconductor 有一个 Ruuid 包,但它似乎不再存在,但在“Ruuid”上的谷歌搜索将指向您可以下载它的地方。

【讨论】:

我认为这意味着它不再被维护?如果是这样,我想知道是否有兴趣在 R-forge 上重振它? 对。我只是不知道为什么它被淘汰了。可能只是他们不再需要它——它最初是为“graph”包编写的,作为唯一标识节点的一种方式。 IIRC 它将 libuuid 软件直接嵌入到软件包中,以避免给 Windows 用户带来麻烦,也许那里存在许可证问题。我怀疑前者。最后一个版本是 BioC 2.8(去年 4 月),它没有使用它:bioconductor.org/packages/2.8/bioc/html/Ruuid.html 该版本在 linux 上对我来说是开箱即用的。 IMO 如果有兴趣,礼貌的做法是联系 biocore 并询问他们是否愿意接受维护者的角色。否则,它属于相当宽松的艺术许可。 我现在接受@thelatemail 的答案,尽管你的答案是更好的长期解决方案。有时间我会联系维护人员的。【参考方案3】:

如果你在 Unix 环境下使用 R,你可以使用 system() 命令在 R 中获取 UUID。

在 Linux(Ubuntu 12.04 LTS)上:

my_uuid <- system("uuid",intern=T)
my_uuid
[1] 0f62f1de-418d-11e3-8a19-cb0ceccb58ec

在 Mac OS X 10.8 上:

my_uuid <- system("uuidgen", intern=T)
my_uuid
[1] 9A9D64DF-EB01-47E7-B16E-DC0343951883

据我所知,uuiduuidgen 都遵循 UUID Version 4 格式。

【讨论】:

windows/powershell 有什么类似的吗?【参考方案4】:

现在的最佳选择是uuid 包。它由一个函数 (UUIDgenerate) 组成,它不依赖于 R 的内部随机数生成器,因此不会像@thelatemail 的回答那样在会话中使用set.seed 造成任何后果。您可以选择由包的内部随机数生成器或基于时间生成 UUID。

【讨论】:

uuid 包中似乎存在错误。很简单,如果你生成一个 uuid 向量,其中大部分都是重复的。 @Matthew 我认为您可能在做一些奇怪的事情。刚刚在 MacOS 上使用 1M UUID 的向量进行了测试,并且有 1M 的唯一性。完全没有错误。 @Matthew 它们不会重复,但它们可能非常相似。这不是问题。 GUIDs are designed to be unique, not random.

以上是关于如何在 R 中生成 GUID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有触发器和手动插入的情况下在 mysql 中生成/自动增量 guid?

在iOS sdk中生成唯一GUID

在excel中生成GUID

如何在 R 中生成对象的排列或组合?

如何在 R 中生成许多最独特的颜色?

如何在 R Shiny 中生成此图形?