Вопрос по r, random – Как я могу сгенерировать GUID в R?

18

Как я могу генерировать GUID и UUID в R?

Я хотел бы иметь возможность генерировать идентификаторы GUID на основе аппаратного обеспечения и т. Д. Машины, на которой выполняется rsession.

Однако в качестве запасного варианта я был бы рад создать идентификаторы UUID, соответствующие rfc4122.

Есть ли пакет, который может создавать GUID? В противном случае у кого-нибудь есть какой-нибудь RFC4122-совместимый код UUID?

Ваш Ответ

4   ответа
9

вы можете получить UUID в R, используяsystem() команда.

On Linux (Ubuntu 12.04 LTS):
my_uuid <- system("uuid",intern=T)
my_uuid
[1] 0f62f1de-418d-11e3-8a19-cb0ceccb58ec
On Mac OS X 10.8:
my_uuid <- system("uuidgen", intern=T)
my_uuid
[1] 9A9D64DF-EB01-47E7-B16E-DC0343951883

Насколько я знаю, обаuuid а такжеuuidgen следуетUUID версия 4 формат.

3

У Bioconductor был пакет Ruuid, которого, похоже, больше нет, но поиск в Google по запросу "Ruuid" будет указывать места, которые вы можете скачать.

Правильно. Я просто не знаю, почему он пропал. Возможно, просто им это больше не нужно - изначально оно было написано для «графика». Пакет как способ уникальной идентификации узлов. IIRC встроила программное обеспечение libuuid непосредственно в пакет, чтобы избежать хлопот пользователей Windows, возможно, там возникла проблема с лицензией. Я подозреваю, что первый, хотя. Последним выпуском был BioC 2.8 (последний апрель), в котором ничего не было использовано:bioconductor.org/packages/2.8/bioc/html/Ruuid.html
Я сейчас принимаю ответ от @thelatemail, хотя ваше решение является более долгосрочным. Я свяжусь с сопровождающими, когда у меня будет немного времени. fmark
Например:bioconductor.org/packages/2.6/bioc/html/Ruuid.html
Эта версия работает из коробки для меня на Linux. IMO, если есть интерес, вежливым было бы связаться с biocore и спросить, согласны ли они с тем, кто берет на себя роль сопровождающего. В противном случае, это под Художественной лицензией, которая является довольно разрешительной.
Я предполагаю, что это означает, что это больше не поддерживается? Если так, то мне интересно, если бы там было интересно оживить его на R-Forge? fmark
11

Я ничего не знаю о тонкостях 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

@iShouldUseAName - я бы не назвал это опасным. На все случайные функции в R влияет set.seed, и теперь я не могу это изменить.
Да, выглядит хорошо для UUID. Теперь нам нужны только GUID :) fmark
@ thelatemail, вы можете использовать инструмент, который не полагается на внутренние генераторы случайных чисел R / предоставлять предупреждение с ответом. Это почти наверняка лучший ответ сейчас:cran.r-project.org/web/packages/uuid/index.html
Это опасно, если кто-то использует set.seed.
@iShouldUseAName - это почти наверняка есть - не стесняйтесь опубликовать его в качестве ответа. Я не могу путешествовать во времени -uuid был впервые выпущен через 7 месяцев после этого ответа.
14

Оптимальным выбором для этого сейчас являетсяuuid пакет. Состоит из одной функции (UUIDgenerate) который не полагается на внутренние генераторы случайных чисел R и поэтому не страдает от каких-либо последствий от использованияset.seed в сеансе, как ответ @ thelatemail. Вы можете выбрать, чтобы UUID генерировался либо внутренним генератором случайных чисел пакета, либо на основе времени.

@ Matthew Они не будут дубликатами, но они могут быть очень похожими. Это не является проблемой.GUIDs are designed to be unique, not random.
в пакете uuid, похоже, есть ошибка. Проще говоря, если вы генерируете вектор uuids, большинство из них будут дубликатами.
@ Матвей, я думаю, ты можешь делать что-то странное. Только что протестировал это на MacOS с вектором 1M UUID и имел 1M unique. Никаких ошибок.

Похожие вопросы