产生一个随机的整数序列... 30次

问题描述 投票:1回答:2

我需要生成一组随机长度的整数(从1到20),这需要重现30次。要生成随机长度列表,我使用runif函数,它可以工作。但是,当我使用rep函数重复此随机列表时,它只是重复相同的列表30次。我想要的是以下内容:

1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
1 2 3 
etc.

相反,runif产生一个列表,rep重复它30次,所以它看起来像这样:

1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
etc.

我理想地喜欢R来运行runif命令30次。现在,我不知道如何为此编写循环,我也不知道如何使用比循环更优雅的东西。我尝试使用repeat函数,但是那个不生成整数,但是我不能用于我需要的计算的列表。

这该怎么做?

r random integer sequence repeat
2个回答
3
投票

使用:

# using set.seed for reproducibility
set.seed(171223)

# create a vector of end-points
ends <- sample(20, 30, TRUE)

# create a list of vector, each from 1 to an end point in 'ends'
lst <- Map(':', 1, ends)

给出这个列表(显示的前5个元素):

> lst[1:5]
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

[[2]]
[1] 1 2 3 4 5 6

[[3]]
[1] 1 2 3 4 5 6 7

[[4]]
[1] 1 2 3 4

[[5]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

如果你想在一个向量中,你可以将它包装在unlist中:

lst2 <- unlist(Map(':', 1, ends))

这使:

> lst2
  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16  1  2  3  4  5  6  1  2  3  4  5  6  7  1  2  3  4  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16  1  2  3  4  5
 [55]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20  1  2  3  4  5  6  7  8  1  2  3  4  5  1  2  3  4  5  1  2  3  4  5  6  7  8  9 10 11 12 13  1  2  3
[109]  4  5  6  7  8  9 10 11  1  2  3  4  5  6  7  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18  1
[163]  2  3  4  5  6  7  8  1  2  3  4  5  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17  1  2  3  4  5  6  7  8  9 10 11  1  2  3  4  5  6  7  1  2  3  4  5  6  7
[217]  1  2  1  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15  1  2  1  2  3  4  5  6  1  2  3  4  5  6  1  2  1  2  3  4  1  2  3  4  5  6  7  8  9 10 11 12 13 14

3
投票

您可以复制1:sample(20, 1) 30次,如下所示。

replicate(30, 1:sample(20, 1))

这将生成一个长度为30的列表,如下所示(仅显示前3个元素)。

[[1]]
[1] 1 2 3 4 5 6 7

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10 11 12

[[3]]
[1] 1 2 3 4 5 6 7 8

...

如果需要单个矢量结果,只需将表达式包装在unlist()中。

unlist(replicate(30, 1:sample(20, 1)))
© www.soinside.com 2019 - 2024. All rights reserved.