Я хочу условно заменить значения в указанном векторе c в трехмерном массиве, причем значением замены является значение из расчета вероятности. По какой-то причине значение замещения является одинаковым для всех значений вектора, а не вычисляется на основе отдельных элементов вектора. У меня должно быть что-то простое неверное в моем синтаксисе
library (abind)
pop <- array(c (1,0,1,1,1,0,0,0,0,0,2,0,2,3,5), dim = c(1,5,3))
pop <- abind(pop,pop, along = 1)
, поэтому конкретный вектор, над которым я хочу работать, это
pop[dim(pop)[1], ,1]
[1] 1 0 1 1 1
, чего я хочу достичь, это оставить нулевое значение в покое, и если значение равно единице, то запустите случайный биномиальный тест, чтобы увидеть, если он изменится на ноль, и если он действительно изменится, выполните вставку. Мне сказали, что ifelse векторизован, но с этим синтаксисом он не работает индивидуально для каждого элемента вектора. Когда я пытаюсь создать новый вектор как таковой
ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)
, я не получаю никаких изменений
> ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)
[1] 1 0 1 1 1
или, в качестве альтернативы, меняются все значения.
> ifelse (pop[dim(pop)[1], ,1] == 1, rbinom(1,1,0.5), 0)
[1] 0 0 0 0 0
I Я ожидаю, что некоторые значения в массиве будут изменены, но не "все или ничего". Что я делаю неправильно? Также, если есть простой элегантный способ сделать замену обратно в исходный 3d-массив, я был бы благодарен. Спасибо. J