Добавить повторяющийся столбец в конец матрицы - PullRequest
1 голос
/ 28 февраля 2012

У меня есть матрица из одного столбца и 6 строк.Я хотел бы повторить этот столбец i раз, но каждый раз менять одно значение случайным образом, и после каждой итерации вычислять среднее значение и дисперсию для всех столбцов.

Например:

values = rnorm(6, 6, 1); matrix1 = matrix(values, 6)

После i = 1 будет выглядеть так:

values2 = values
values2[sample(1:6, 1)] = values2[sample(1:6, 1)]+runif(1, 0, 1)
matrix2 = matrix(c(values, values2), 6)

В конце я хотел бы вывести кадр данных, который выглядитвот так:

i   mean   var
1   1.23  2.31
2   1.24  2.33 etc...

Для многих i .Я предполагаю, что есть способ сделать это с помощью петель, но мои навыки не таковы, что я могу понять это.Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Если вы знаете, сколько раз вы делаете это, было бы лучше построить свою окончательную матрицу заранее, особенно если я большой.Однако без этого:

jitter.func <- function(x, vec) {
  cell <- sample(1:length(vec), 1)
  vec[cell] <- vec[cell] + runif(1, 0, 1)

  return(c(mean=mean(vec), var=var(vec)))
}


i <- 10
sapply(1:i, jitter.func, vec=values)
0 голосов
/ 29 февраля 2012
j <- 20 # Number of columns 
i <- 6 # Number of rows
vec <- matrix(rnorm(i,6,1),ncol=j,nrow=i)# vector replicated j times
idx <- sample(seq(i),j,replace=TRUE) # j random rows
vec[cbind(idx, seq(j))] <- vec[cbind(idx, seq(j))]+runif(j) # add random number to random row in each column
apply(vec,2,plyr::each(mean,var)) # summary statistics
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...