Вы можете сделать это без использования циклов for и операторов if:
##Generate some data
R> A = sample(0:1, 100, replace=TRUE)
##Generate n U(0,1) random numbers
##If any of the U's are less then 0.1
##Set the corresponding value in A to 0
R> A[runif(length(A)) < 0.1] = 0
Другой момент, на который следует обратить внимание, заключается в том, что вам не нужно делать ничего особенного для значений A, которые фактически равны 0, поскольку вероятность изменения 1 в 0 по-прежнему равна 0,1.
Как указывает Хэдли, ваш код не меняет случайным образом 10% от 1 до 0. Если это действительно ваше намерение, то:
##Select the rows in A equal to 1
R> rows_with_1 = (1:length(A))[A==1]
##Randomly select a % of these rows and set equal to zero
##Warning: there will likely be some rounding here
R> A[sample(rows_with_1, length(rows_with_1)*0.1)] = 0