R не имеет оператора приращения =+
.
x =+ 1
эквивалентно
x = (+1)
x = 1
Таким образом, в вашем коде, вы установите my.vect[screen]
, равным 1, и вы делаете это в 100 раз.
Каждый раз, когда вы устанавливаете 50 случайных индексов на 1. Объяснение с replace = F
противоположно тому, что имеет смысл ... каждый раз, когда вы выбираете 50 уникальных случайных индексов, но на каждой итерации некоторые из выбранных вами индексов могут перекрываются с предыдущими выборами, поэтому вы добавляете (возможно) меньше 50 новых 1 каждый раз.
Это можно легко увидеть, если вы делаете меньший пример и отслеживаете каждую итерацию. Я сделал это ниже, где каждая итерация является строка матрицы:
N = 20
k = 10
my.mat = matrix(0, nrow = k, ncol = N)
my.mat
set.seed(47)
for (row in 1:k) {
screen = sample(N, 4, replace=FALSE)
my.mat[row, screen] = 1
}
my.mat
colSums(my.mat) # you can see that many indices were chosen multiple times
# but if you used my random seed, one column was never chosen
# your final result from above is equivalent to
colSums(my.mat) > 0
Я не ясно, что вы хотите сделать. Если ваша цель состоит в том, чтобы приращению, вы можете сделать это в матрице, как я сделал и использовать colSums
, или вы могли бы установить
my.vect[screen] = my.vect[screen] + 1
Если вы хотите выбрать различные значения каждый раз, сделать все отбор проб спереди, перед циклом
screen = sample(6000, 50 * 100, replace = FALSE)
, а затем внутри использования петли
my.vect[screen[ seq(50 * (i - 1) + 1, 50 * i) ]] = 1
(хотя в этой точке петля не делает ничего хорошего).