【问题标题】:How to sample 1:x where x is a vector of random integers with length greater than 1如何对 1:x 进行采样,其中 x 是长度大于 1 的随机整数向量
【发布时间】:2013-04-23 18:19:56
【问题描述】:

示例代码

population <- 10000
vec <- sample(1:6, population, replace=T)    
output <- sample(1:vec, population, replace=T)

警告:数值表达式有 10000 个元素:只使用第一个。

样本正在尝试更改每个选择的样本限制,因此一次迭代应在 1:2 之间随机抽样,另一次可能在 1:6 之间。最大值的值在'vec'中定义

构造这条线的正确方法是什么,使其知道将“输出”创建为长度为 10,000 的向量,并正确引用“vec”中的最大值?目前它仅对“输出”中的所有 10000 个样本使用“vec”的第一个值

【问题讨论】:

  • 在第一行中,您从 1:6 的向量中采样 10,000 次,然后尝试在调用 : 运算符时使用这 10,000 个样本来定义序列。

标签: r


【解决方案1】:

也许使用sapply 来循环vec

out <- sapply(vec,sample,size = 1)

【讨论】:

    【解决方案2】:

    另一种方法:创建一个矩阵,其中列是使用不同数字的样本。然后构建一个从每一行随机取值的向量。我认为这可能会更快,但两种方式都非常快。

    population <- 1e4
    samp.mat <- sapply(1:6,sample.int,size=population,replace=TRUE)
    indices <- cbind(seq_len(nrow(samp.mat)),sample.int(6,nrow(samp.mat),replace=TRUE))
    out <- a[indices]
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2022-07-26
      相关资源
      最近更新 更多