【问题标题】:How to associate a pseudo-random variable to a string?如何将伪随机变量与字符串相关联?
【发布时间】:2016-03-04 20:45:17
【问题描述】:

在 R 中,我正在生成一个文档,其中包含针对人员列表的随机部分。

但是,我希望同一份文档,发给同一个人但生成了多次,总是返回相同的号码。

例如,我对团队编号(A 或 B)进行抽样,并且我希望 P 提及文档的任何版本,例如 A。

我知道set.seed 函数,但这需要一个整数,其中我有字符串(人名)。那么,在我的情况下,有没有一种聪明的方法可以将字符串映射到整数?还是其他(更简单)的生成随机文档的解决方案?

【问题讨论】:

  • 我不知道如何在 R 中做到这一点,但是实现一个散列函数将字符串映射到整数应该很容易。例如:stackoverflow.com/a/2624210/2947592
  • 如果在您的示例中您预先知道所有人,您可以创建一个名称为级别的因子,并使用整数表示来设置种子
  • 使用一个因子(你可能已经有了这个因子,因为这是带有 read.* 函数的字符数据的默认值)并使用 as.numeric 进行转换。
  • 你可以使用它的编码,比如stri_enc_toutf32(your_string)。将结果粘贴在一起并转换为整数。可以选择按大素数进行修改。
  • 如果你想走散列路线(看起来它可以很好地工作),你可能想在不久前调整 this answer of mine 中的代码。

标签: r random hash-function


【解决方案1】:

也许将文本转换为十六进制或位会对您有所帮助:

# simple example
x <- charToRaw("Matthew")
y <- rawToBits(x)
packBits(y)
# [1] 4d 61 74 74 68 65 77
rawToChar(packBits(y))
# [1] "Matthew"

# with more data
df <- data.frame(names=c("Matthew M.", "Mark T.", "Luke S.", "John U."), stringsAsFactors = FALSE)
df$Raw <- lapply(df$names, FUN=charToRaw)
df$Bits <- lapply(df$Raw, FUN=rawToBits)

bitsToChar <- function(x) {rawToChar(packBits(x))}
df$Char <- lapply(df$Bits, FUN=bitsToChar)
df$Char
# [[1]]
# [1] "Matthew M."
# 
# [[2]]
# [1] "Mark T."
# 
# [[3]]
# [1] "Luke S."
# 
# [[4]]
# [1] "John U."

【讨论】:

  • 我看到你的回答,我会试试的,希望今晚。
  • 您还应该查看 Jjosh O'Brien 提供的链接。看起来也很有希望。
  • 哼...我不明白我是如何获得一个独特的 integer 来为您的解决方案设置种子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2010-09-08
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多