#r
#r
Вопрос:
Как я могу вычесть вектор из каждой строки в массиве?
a <- array(1:8, dim=c(2,2,2))
a
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
Использование apply дает мне:
apply(a,c(1,2), '-',c(1,5))
, , 1
[,1] [,2]
[1,] 0 1
[2,] 0 1
, , 2
[,1] [,2]
[1,] 2 3
[2,] 2 3
То, что я пытаюсь получить, это:
, , 1
[,1] [,2]
[1,] 0 -2
[2,] 1 -1
, , 2
[,1] [,2]
[1,] 4 2
[2,] 5 3
Заранее спасибо за любые подсказки
Ответ №1:
Используется sweep
для работы с определенным полем массива: строки являются вторым измерением (margin).
sweep(a,MARGIN=2,c(1,5),FUN="-")
Ответ №2:
> library (plyr)
> aaply(a, 1, "-", c(1,5) )
, , = 1
X1 1 2
1 0 -2
2 1 -1
, , = 2
X1 1 2
1 4 2
2 5 3
Комментарии:
1. спасибо и за это решение, оно делает именно то, что я ищу
Ответ №3:
Используйте scale
, чтобы вычесть либо среднее значение, либо указанный вектор из каждой строки, а затем разделить его либо на стандартное отклонение, либо на указанный вектор.
Для вашего примера: scale(a, c(1,5), FALSE)
Ответ №4:
> a - rep(c(1,5),each=2)
, , 1
[,1] [,2]
[1,] 0 -2
[2,] 1 -1
, , 2
[,1] [,2]
[1,] 4 2
[2,] 5 3
Комментарии:
1. спасибо за ваш ответ, нет ли способа просмотреть массив по строке?