在 R 中生成多个字符的(随机)序列

问题描述 投票:0回答:3
  1. 我可以使用

    创建单个字母的序列
    LETTERS[seq( from = 1, to = 10 )]
    letters[seq( from = 1, to = 10 )]
    
  2. 我可以使用

    random
    包创建各种长度的随机字符串

    library(random)
    string <- randomStrings(n=10, len=5, digits=TRUE, upperalpha=TRUE,
                      loweralpha=TRUE, unique=TRUE, check=TRUE)
    

不幸的是,我无法使用

set.seed
功能,例如
2

有没有一种方法可以在每次运行 R 文件时创建相同(随机)的(唯一)字符串组合?

我的结果将如下所示(每次运行该函数时都有相同的结果):

       V1     
  [1,] "k7QET"
  [2,] "CLlWm"
  [3,] "yPuwh"
  [4,] "JJqEX"
  [5,] "38soF"
  [6,] "xkozk"
  [7,] "uaiOW"
  [8,] "tZcrW"
  [9,] "8K4Cc"
 [10,] "RAhuU"
r random
3个回答
10
投票

在文件 test.R 中,添加以下内容

set.seed(1)
stringi::stri_rand_strings(10, 5)

然后每次都可以重现。

replicate(5, source("test.R", verbose = FALSE)$value)
#       [,1]    [,2]    [,3]    [,4]    [,5]    
#  [1,] "GNZuC" "GNZuC" "GNZuC" "GNZuC" "GNZuC" 
#  [2,] "twed3" "twed3" "twed3" "twed3" "twed3"
#  [3,] "CAgNl" "CAgNl" "CAgNl" "CAgNl" "CAgNl"
#  [4,] "UizNm" "UizNm" "UizNm" "UizNm" "UizNm" 
#  [5,] "vDe7G" "vDe7G" "vDe7G" "vDe7G" "vDe7G"
#  [6,] "N0NrL" "N0NrL" "N0NrL" "N0NrL" "N0NrL"
#  [7,] "TbUBp" "TbUBp" "TbUBp" "TbUBp" "TbUBp"
#  [8,] "fn6iP" "fn6iP" "fn6iP" "fn6iP" "fn6iP" 
#  [9,] "oemYW" "oemYW" "oemYW" "oemYW" "oemYW"
# [10,] "m1Tjg" "m1Tjg" "m1Tjg" "m1Tjg" "m1Tjg"

作为

source()
的替代方案,您可以在那里使用
parse()

replicate(5, eval(parse("test.R")))

8
投票

基础 R 的替代解决方案:

set.seed(1)
result <- rawToChar(as.raw(sample(c(65:90,97:122), 5, replace=T)))

受到另一篇文章的回答的启发:https://stackoverflow.com/a/4370074/8297546


0
投票

制作一些随机数向量(在一定范围内)并将它们提供给

intToUtf8

© www.soinside.com 2019 - 2024. All rights reserved.