Возьмем следующую реализацию плохо псевдослучайных чисел генератора (ПСЧ) randu:Randu в R: заполнить матрицу без цикл
n = 100000
randu = matrix(NA, ncol=3, nrow=n)
new_z = 1
for(i in 1:n) {
new_x = (65539*new_z) %% 2^31
new_y = (65539*new_x) %% 2^31
new_z = (65539*new_y) %% 2^31
randu[i,] = c(x=new_x/2^31, y=new_y/2^31,z=new_z/2^31)
}
Я хочу, чтобы заменить цикл. Проблема здесь в том, что записи целой строки, которые генерируются с каждым шагом итерации, необходимы для последующего шага итерации. Моя идея - применить функцию для заполнения строк пустой матрицы. Так что я пытаюсь стать знаком с функцией apply
, и я получил это далеко:
n = 100000
randu = matrix(NA, ncol=3, nrow=n)
randu[1,3] <- 1 # seed
randu.fct <- function() {
randu[,1] <- (65539 * randu[,3]) %% 2^31
randu[,2] <- (65539 * randu[,1]) %% 2^31
randu[,3] <- (65539 * randu[,2]) %% 2^31
}
apply(randu[,1:3],1,randu.fct)
..which не очень много. Я не могу понять, как перебирать каждый элемент строки и как генерировать, например. 100000 строк.
Спасибо! Мне нравится встроенный C++, это действительно полезно. Я все еще интересуюсь функциональностью функции «apply», касающейся таких матричных операций, но я думаю, что сначала проверю http://www.r-bloggers.com/?s=apply –
Как 'mapply'works поэтапно, это может быть полезно. –