【问题标题】:How to generate a sample in R or which the distance between the numbers drawn is equal如何在 R 中生成样本或绘制的数字之间的距离相等
【发布时间】:2016-12-20 16:51:42
【问题描述】:

我在 R 中工作,我正在尝试生成 N 的样本,但所有数字之间的距离必须相等。因此,例如 1:10 中的一组 5 个数字,其中每个数字的距离为 2 将给出 (c(1,3,5,7,9)。

现在我有runif(N, min = 0, max = 10),但这只会随机给我 N 个数字。当我使用示例函数时也会发生同样的情况。

过去一天我一直在尝试解决这个问题,但找不到具有解决方案的线程/函数。有人有线索吗?

【问题讨论】:

  • 听起来您想按程序(而不是随机)生成一组数字。为此,您需要使用seq。然后你可以使用sample 随机打乱它们
  • 谢谢!这行得通
  • 但是这里的问题是,当你然后从seq中抽取样本时,数字之间的距离仍然不相等
  • 好吧,如果你使用 sample 只是洗牌,那么有序值之间的距离是相同的。您在获得帮助时会发现的主要问题是,您的问题要么对我们来说定义得不够好(所以只需提供更多示例输入/输出示例),要么就是总体上没有很好地定义。
  • 实际上阅读您对现已删除的答案的评论,似乎问题在于您没有充分了解 seq 的参数。您可以选择定义开始/停止值,并告诉它您总共需要多少个值(因此您无需指定实际间隙本身)。虽然这没有随机性,所以当你谈论随机性和/或取样时,你需要更加注意。

标签: r seq


【解决方案1】:

试试这个

myfun <- function(R, N, I) {
              max.start <- tail(range,1)-(N-1)*2 # sequence of output cannot extend beyond range
              start <- sample(max.start, 1)
              seq(start, by=I, length.out=N)
         }

range <- 1:10
N <- 5
interval <- 2

# 1 trial
myfun(range, N, interval)
# [1]  2  4  6  8 10

# 10 trials
t(replicate(10, myfun(range, N, interval)))
      # [,1] [,2] [,3] [,4] [,5]
 # [1,]    1    3    5    7    9
 # [2,]    1    3    5    7    9
 # [3,]    2    4    6    8   10
 # [4,]    1    3    5    7    9
 # [5,]    1    3    5    7    9
 # [6,]    2    4    6    8   10
 # [7,]    2    4    6    8   10
 # [8,]    2    4    6    8   10
 # [9,]    1    3    5    7    9
# [10,]    2    4    6    8   10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多