【问题标题】:R: How to generate a sequence seq() given a condition?R:如何在给定条件的情况下生成序列 seq()?
【发布时间】:2012-02-18 23:16:40
【问题描述】:

我刚刚发现了 R,我正在尝试使用它。

这是我想要实现的目标:

我有一个数字向量 x,介于 50 和 100 之间,大小为 250 个观测值。

x = sample(seq(50, 100), 250, repeat = T)

现在,我想生成另一个数字向量 y,介于 0 和 100 之间,它与向量 x 的大小相同,因此 y 中的每个元素都小于或等于 x 中的等效元素。

也就是说,如果x[1]是76,那么y[1]在生成时可以达到的最高值是76。但它绝对可以是任何其他低于76的值。换句话说,更一般地说,我希望以 y[i] 的方式生成向量 y

我希望我的要求更清楚了。

非常感谢!

【问题讨论】:

  • 您的问题格式错误,因为y 有许多可能的值。请更具体地说明您希望如何生成 y
  • 是的,请提供更多信息。一个可能的解决方案是y <- x
  • 另一种可能:y <- round(runif(length(x))*x)
  • seq(50, 100, repeat = T) 对我产生错误。你的意思是seq(50, 100, rep = T)?即使那样 rep = T 似乎也没有做任何事情,所以你可以使用 seq(50, 100) 或我的偏好 50:100
  • @Henry,你是对的!它会产生一个错误,但我更新了帖子,现在我给出了正确的命令!对不起,我只是一个初学者!

标签: r random vector


【解决方案1】:
y <- x -1 # ...........................

 y <- sapply( x, function(x) runif(n=1, max=x))
 y
 [1]  7.2713788 30.0008063 42.5205775  0.9271717 10.7114456 39.5199145  7.4109775
 [8] 28.3464373 28.5840101 34.0654033 15.0675028 50.2836294 45.9031794 13.5931005
[15] 43.2751738 17.0560824  3.1507491 25.7619129 12.3391448 22.6203684 51.3334810
[22] 37.0481703 33.4733277 37.1304850 26.7984406 66.3844126 40.2775918 47.6379024
[29] 16.2480595 66.8358384 33.3513161 60.2673874 65.6204462 45.6951960  1.5729434
[36] 20.4850357  0.1345737 84.5334203 19.7997451 53.8025623 48.5528486  8.8992123
[43] 90.9651742 28.3584167 41.7728159 46.4790641 17.8129578 83.1906415 37.5114353
[50] 89.5685501 85.2499600

【讨论】:

  • 这是我的问题的可能解决方案;但是,我希望向量 y 中的元素以向量 x 的元素作为上限来随机生成!
  • 能否详细解释一下代码的作用?非常感谢!
  • @BenBolker,我也希望你能解释一下你的代码,尽管我可以看到与 DWin 所写的相似之处。谢谢!
  • @SavedByJESUS runif(3, max=c(1, 2, 3)) 将分别返回从[0, 1][0, 2][0, 3] 抽取的 3 个随机值。
  • @baptiste 非常感谢。你会说法语吗?你的名字看起来像法国人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2014-10-24
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多