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

如何在 R 中生成 GUID 和 UUID?

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

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

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

【问题讨论】:

    标签: r random guid 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.
    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2011-07-26
    • 2010-12-04
    相关资源
    最近更新 更多