R - 在放射子样本中处理零

时间:2017-01-16 13:06:52

标签: r r-factor

我遇到了一个小问题,模拟掷骰子。基本上我这样做是为了熟悉循环及其输出。 意图是模拟两个骰子的投掷如下:

R = 100
d6 = c(1:6)
d = 60
DICE = NULL
for (i in 1:R)
{
i <- as.factor((sample(d6, size=d, replace = T)) + (sample(d6, size=d, replace = T)))
j <- summary(i)
DICE = rbind(DICE, j)
}
head(DICE)
HIS = colMeans(DICE)
boxplot(DICE)
title(main= "Result 2d6", ylab= "Throws", xlab="")
relHIS = (HIS / sum(HIS))*100
relHIS

如果一个导管中的结果为0(样本中未发生结果),则会出现问题。如果这在第一个子样本中随机发生,则缺少一个或多个类别(数字2-12)。这导致以下子样本中的问题(“结果列数不是向量长度的倍数(arg 2)”)。 我确定有一个非常简单的解决方案,通过事先定义一切......

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

以下是一些修正:

R = 100
d6 = c(1:6)
d = 60
DICE = matrix(nrow = R, ncol = 11) #pre-allocate
colnames(DICE) <- 2:12 

for (i in 1:R)
{
  sim <- ordered((sample(d6, size=d, replace = T)) + (sample(d6, size=d, replace = T)), 
                 levels = 2:12) #define the factor levels
  sumsim <- table(sim)
  DICE[i,] <- sumsim #sub-assign
}
head(DICE)
HIS = colMeans(DICE)
boxplot(DICE)
title(main= "Result 2d6", ylab= "Throws", xlab="")

prop.table(HIS) * 100

始终预先分配结果数据结构。在循环中增长它非常慢,你知道它需要多大。另外,不要对迭代变量和其他东西使用相同的符号。

答案 1 :(得分:0)

在第七行中省略as.factor()