1

设置是:“假设您有 10,000 人和 6,000 人是民主党人。我们从这个假设的人口中模拟调查抽样。首先,在 R 中生成人口的向量。然后,创建 500 个大小为 n = 1,000 的随机样本。

到目前为止,我的代码是:

pop<-c(rep("Democrat", 6000), rep("Republican", 4000))


nTrials <- 500
n <- 1000
results <- rep(NA, nTrials)

for(i in 1:nTrials)
{
  sampled <- sample(x=pop, size=n, replace=FALSE)
  results[i]<- sampledpop<-c(rep(1, 6000), rep(0, 4000))


nTrials <- 500
n <- 1000
results <- matrix(data=NA, ncol = nTrials, nrow = n)
Y<-matrix(data=NA, ncol=nTrials, nrow=1)

for(i in 1:nTrials)
{
  sampled <- sample(x=pop, size=n, replace=TRUE)
  results[,i]<- sampled
  Y[,i]<- sum(results[,i])
}

我认为这段代码有效,但我担心如何判断矩阵是否正确填充。

4

2 回答 2

1

您可以使用查看功能轻松查看已保存的对象。链接到 R 中的视图函数

我们也可以在我们的 R 代码中加入一行代码,直到击键后才停止执行。涵盖此的堆栈交换线程

将两者放在一起,我们可以将两行放入一个循环中,一条显示最终输出的当前版本,另一条暂停循环,直到我们继续。这将让我们逐步探索循环的行为。以您的循环之一为例:

for(i in 1:nTrials)
{
  sampled <- sample(x=pop, size=n, replace=TRUE)
  results[,i]<- sampled
  Y[,i]<- sum(results[,i])
  View(Y)
  readline(prompt="Press [enter] to continue")
}

请记住,这将继续进行指定数量的试验。

你可以限制试验的数量,但你不能确保得到相同的结果,所以我们可以在代码中插入一个中断。链接到有关 break 语句的信息。这让我们可以提前中断 for 循环,假设我们对事情的构建方式感到满意。为了让休息真正闪耀,让我们将它与一些用户输入配对,您可以选择是否要继续。用于在 r 中收集用户输入的链接

因此,将所有这些结合起来,我们会得到类似的结果:

for(i in 1:nTrials)
{
  sampled <- sample(x=pop, size=n, replace=TRUE)
  results[,i]<- sampled
  Y[,i]<- sum(results[,i])
  View(Y,)
  interrupt = readline(prompt="Enter 1 for next loop, 0 to exit: ")
  if (interrupt == 0) {break}
}

就其价值而言,到目前为止,您的代码对我来说看起来非常好。

于 2020-10-18T04:56:49.997 回答
0

试试这个

replicate(500L, sample(c("Democrat", "Republican"), 1000L, replace = TRUE, prob = c(0.6, 0.4)), simplify = FALSE)

或这个

pop <- c(rep("Democrat", 6000L), rep("Republican", 4000L))
replicate(500L, sample(pop, 1000L), simplify = FALSE)
于 2020-10-18T03:10:35.140 回答