首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环中的set.seed()导致重复是正常的吗?

循环中的set.seed()导致重复是正常的吗?
EN

Stack Overflow用户
提问于 2021-06-28 00:34:14
回答 1查看 44关注 0票数 1

我需要从数据集中提取几个分层的子集。我发现首先只生成行索引是有帮助的,然后我使用它来子集数据集以供进一步分析。我做了以下工作:

代码语言:javascript
运行
复制
#strata variable
a1 <- c(1,1,1,2,2,2,2,2,3,3,3,4,5,5,5,5,5,5,6,6,7,7,7,7)
set.seed(9292)
#some values
a2 <- rnorm(24)

xdt <- as.data.table(cbind(a1, a2))
#total possibilities
prod(xdt[,.N,by=a1]$N)


idlist <- list()
for(i in 1:1000){
  set.seed(i)
  xdt2 <- xdt[, .SD[sample(.N, min(1,.N))], by = a1]
  #return the index
  idlist[[i]] <- which(xdt$a2%in%xdt2$a2)
}


#create a tabular format of the indices
#each row of the table is to be used to subset datasets for analysis 
idlist <- matrix(unlist(idlist), nrow = 7)
idlist <- t(idlist)
idlist <- as.data.table(idlist)
idlist <- unique(idlist)

当每层选择一行时,大约有2000个不同的子集可以提取。当我运行上面的代码时,我发现使用unique命令删除了一些行。这很好,因为到目前为止,最终结果似乎是相同的。如果我想最终得到1000个唯一索引,我可以将总迭代次数增加到1000次以上。然而,我想知道这是否正常?如果set.seed在每次迭代中都在变化,那么不是应该一直都有完全独特的可能性吗,特别是在总可能性如此之多的情况下(2160,在这种情况下几乎是两倍)?

或者,我正在犯一个对我来说并不明显的错误?

EN

回答 1

Stack Overflow用户

发布于 2021-07-02 01:37:45

正如评论中所解释的。使用set.seed不能保证随机性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68153251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档