У меня есть большие матрицы (Zs) с пятью колоннами и 51695 линий, таких как:Повторите многократное применение. Должен ли я использовать цикл for?
str(zs1)
num [1:51695, 1:5] 1.347 1.189 1.675 1.055 0.224 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "run 1" "run 2" "run 3" "run 4" ...
Я хотел бы генерировать вектор, содержащий средние значения для каждого из 5 значений в столбце Zs.
zs.stouffer1 = apply(zs1, MARGIN = 1, median)
Как это сделать в цикле для i числа zs-матриц?
Это моя попытка:
for (i in 1:23) {
zs.stouffer <- paste("zs.stouffer", i, sep = "")
value <- apply(zs[i], MARGIN = 1, median)
assign(zs.stouffer,value)
}
Но я получаю:
Ошибка применить (ZS [я], MARGIN = 1, медиана): тусклый (X) должна иметь положительный длина
Поместите матрицы в список, а затем используйте 'lapply' для запуска списка. Что-то вроде 'matList <- mget (ls (pattern =" zs ")); myMedianList <- lapply (matList, функция (i) применяется (i, MARGIN = 1, медиана)). – lmo
Также посмотрите на пакет 'matrixStats'. Функция 'rowMedians' может упростить задачу – Sotos
Если вам интересно, почему ошибка,' zs [i] 'является индексированием, это не' zs1', если 'i = 1'. Если вы хотите, вы должны сделать то же самое 'paste()' для него, как и в своей функции. 'paste (" zs ", i, sep =" ")'. –