【发布时间】:2012-05-16 14:16:15
【问题描述】:
如何在 R 中生成 GUID 和 UUID?
我希望能够根据运行 rsession 的机器的硬件等生成 GUID。
不过,作为备用方案,我很乐意创建符合 rfc4122 的 UUID。
是否有可以创建 GUID 的包?否则,是否有人有一些与 RFC4122 兼容的 UUID 代码?
【问题讨论】:
如何在 R 中生成 GUID 和 UUID?
我希望能够根据运行 rsession 的机器的硬件等生成 GUID。
不过,作为备用方案,我很乐意创建符合 rfc4122 的 UUID。
是否有可以创建 GUID 的包?否则,是否有人有一些与 RFC4122 兼容的 UUID 代码?
【问题讨论】:
我对 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
【讨论】:
uuid 在这个答案后 7 个月首次发布。
uuid 包解决方案作为单独的答案。
Bioconductor 有一个 Ruuid 包,但它似乎不再存在,但在“Ruuid”上的谷歌搜索将指向您可以下载它的地方。
【讨论】:
如果你在 Unix 环境下使用 R,你可以使用 system() 命令在 R 中获取 UUID。
my_uuid <- system("uuid",intern=T)
my_uuid
[1] 0f62f1de-418d-11e3-8a19-cb0ceccb58ec
my_uuid <- system("uuidgen", intern=T)
my_uuid
[1] 9A9D64DF-EB01-47E7-B16E-DC0343951883
据我所知,uuid 和 uuidgen 都遵循 UUID Version 4 格式。
【讨论】:
现在的最佳选择是uuid 包。它由一个函数 (UUIDgenerate) 组成,它不依赖于 R 的内部随机数生成器,因此不会像@thelatemail 的回答那样在会话中使用set.seed 造成任何后果。您可以选择由包的内部随机数生成器或基于时间生成 UUID。
【讨论】: