Array: вычитать по строке - PullRequest
8 голосов
/ 31 мая 2011

Как я могу вычесть вектор каждой строки в массиве?

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

Заранее благодарен за любые подсказки

Ответы [ 4 ]

15 голосов
/ 31 мая 2011

Используйте sweep для работы с определенным полем массива: строки - это второе измерение (маржа).

sweep(a,MARGIN=2,c(1,5),FUN="-")
4 голосов
/ 31 мая 2011
> 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
3 голосов
/ 01 июня 2013

Используйте scale, чтобы вычесть либо среднее значение, либо указанный вектор из каждой строки, а затем разделить его либо на стандартное отклонение, либо на указанный вектор.

Для вашего примера: scale(a, c(1,5), FALSE)

1 голос
/ 31 мая 2011
> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...