5个字母"字"随机生成

时间:2015-02-23 13:52:28

标签: r random-sample

我想创建一个10"单词"由5个随机生成的字符组成。例如c(" ASDT"," WUIW" ...)

目前我正在使用以下脚本,但肯定应该有更好的方法来执行此操作

result = list()
for (i in 1:10){
result[i]<-paste(sample(LETTERS, 5, replace=TRUE),collapse="")
}
result<-paste(t(result))

4 个答案:

答案 0 :(得分:6)

您的代码没有任何根本性的错误,除非是因为它正在使用循环。

唯一更好的方法是用列表应用程序函数替换循环(在这种情况下:replicate):

replicate(10, paste(sample(LETTERS, 5, replace = TRUE), collapse = ''))

答案 1 :(得分:6)

我会采样一次并将结果转换为data.frame,可以传递给paste0

set.seed(42)
do.call(paste0, as.data.frame(matrix(sample(LETTERS, 50, TRUE), ncol = 5)))
#[1] "XLXTJ" "YSDVL" "HYZKA" "VGYRZ" "QMCAL" "NYNVY" "TZKAX" "DDXFQ" "RMLXZ" "SOVPQ"

答案 2 :(得分:4)

我会创建一个自定义函数,例如这个函数,它将接受一个单词的大小和你想要的单词数量

WordsGen  <- function(n, size){
  substring(paste(sample(LETTERS, n * size, replace = TRUE), collapse = ""),
             seq(1, (n - 1)*size + 1, size), seq(size, n * size, size))
}

set.seed(1)
WordsGen(10, 5)
## [1] "GJOXF" "XYRQB" "FERJU" "MSZJU" "YFQDG" "KAJWI" "MPMEV" "RUCSK" "VQUON" "UAMTS"

答案 3 :(得分:4)

以下是stringi

的选项
library(stringi)
set.seed(1)
stri_rand_strings(10, 5, '[A-Z]')
#[1] "GJOXF" "XYRQB" "FERJU" "MSZJU" "YFQDG" "KAJWI" "MPMEV" "RUCSK" "VQUON"
#[10] "UAMTS"