R - Создать итеративный итеративный - PullRequest
0 голосов
/ 26 апреля 2018

У меня сейчас есть цикл for, который я хочу векторизовать.Он рассчитывает процентное значение 6 в для различных подвекторов.Начиная с [1: 100], [1: 200], ... всегда с шагом в 100 шагов.

rolls.max <- 100000
a <- sample(1:6, size=rolls.max, replace=TRUE)

sixes.ratio <- c()
for(i in 1:(rolls.max/100)) {
  sixes.count <- table(a[1:(i*100)])[6]
  ratio <- sixes.count/(i*100)
  sixes.ratio <- c(sixes.ratio, ratio)
}

Я думаю, что самая сложная часть - это получить счетчик 6 для каждогоподвектор.Я попробовал это:

rolls.max <- 100000
a <- matrix(sample(1:6, size=rolls.max, replace=TRUE))

subset.creator <- function(x, c) if (c!=0  && c%%100==0) { as.vector(table(x[1:(rolls[c/100])]))[6] }
sixes.count <- mapply(subset.creator, a, col(a))
# Converting the other lines won't be difficult I think

Хочу, чтобы я хотел добиться с помощью этого, чтобы создать подвектор a для каждого 100-го вызова функции subset.creator.Затем создайте таблицу и возьмите шестой столбец, чтобы получить число 6, а затем извлеките только число, используя as.vector()

Но это просто дает мне мусор вместо вектора с числом 6.

1 Ответ

0 голосов
/ 26 апреля 2018

Если вы хотите создать «подсчет прокрутки» на каждом сотом фрагменте ваших симулированных бросков, один из способов решения проблемы - создать вектор «остановок», который представляет ваши точки отсечки, а затем используйте sapply для выполнениярасчет (в данном случае подсчет 6с) на каждой остановке:

rolls.max <- 100000
a <- sample(1:6, size=rolls.max, replace=TRUE)

# a vector of "stops" at every hundredth entry of 'a'
stops <- seq(0, rolls.max, 100)[-1]

# counts of 6s from the first entry in 'a' to the values in 'stops'
count.6 <- sapply(stops, function(x) sum(a[1:x] == 6))

# ...or just as easily, the rolling proportion of 6s
prop.6 <- sapply(stops, function(x) mean(a[1:x] == 6))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...