首先,你没有使用正确sample.int()
。第一个参数被视为标量,表示要从中抽样的项目数量。这意味着你的电话总是从一个项目抽样,即1,并且没有随机性。这与sample()
的行为不同。例如:
sample.int(c(1,0),10L,T);
## [1] 1 1 1 1 1 1 1 1 1 1
sample(c(1,0),10L,T);
## [1] 1 0 1 0 0 0 0 0 1 1
既然你需要从0:1
来样,你应该打电话sample()
。
从你的代码,看起来我们可以预先计算一次性的statparam
和cutoff
列不运行任何环路(隐藏或以其他方式)。我们还可以预先计算一个statval
矢量,之后剩下的唯一任务就是执行乘法和加法操作,完成percentage_accuracy
列。棘手的问题在于复制是否正确,因为我们需要列以特定的方式排列,并且我们需要重复每个100个元素的statval
向量正确的次数,因为您的代码在内部重用它循环。
这是我会怎么做:
set.seed(1L);
NI <- 100L;
NS <- 100L;
NJ <- 100L;
res <- data.frame(
percentage_accuracy=c(replicate(NI,rep(sample(0:1,NS,T),NJ))),
statparam=rep(seq_len(NI),each=NS*NJ),
cutoff=rep(seq_len(NJ),NI,each=NS)
);
res$percentage_accuracy <- res$percentage_accuracy+res$cutoff*27L;
str(res);
## 'data.frame': 1000000 obs. of 3 variables:
## $ percentage_accuracy: int 27 27 28 28 27 28 28 28 28 27 ...
## $ statparam : int 1 1 1 1 1 1 1 1 1 1 ...
## $ cutoff : int 1 1 1 1 1 1 1 1 1 1 ...