Почему работа с двумя одинаковыми строками матрицы дает разные значения? - PullRequest
0 голосов
/ 01 сентября 2018

Пример:

> m <- matrix(c(1,2,3,4,5,1,2,3,4,5), nrow=2, byrow=T) 
> m ** c(.1, .1, .1, .3, .4)
     [,1]     [,2]     [,3]     [,4]     [,5]
[1,]    1 1.071773 1.551846 1.148698 1.620657
[2,]    1 1.231144 1.116123 1.148698 1.903654

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Я так понимаю, вы это имеете в виду?

t(t(m) ^ c(.1, .1, .1, .3, .4))
#[,1]     [,2]     [,3]     [,4]     [,5]
#[1,]    1 1.071773 1.116123 1.515717 1.903654
#[2,]    1 1.071773 1.116123 1.515717 1.903654

, где t(m) возвращает транспонирование matrix m.


Дальнейшее объяснение

Вы попали в «ловушку рециркуляции», где R автоматически (и неявно) перерабатывает значения, чтобы соответствующим образом соответствовать размерам векторов в векторизованной операции (здесь возведение в степень). То, что вы делаете, по сути, следующее

as.numeric(m)^c(.1, .1, .1, .3, .4)

Написано так, как становится ясно, как R повторяет вектор c(.1, .1, .1, .3, .4), чтобы соответствовать длине вектора as.numeric(m). Recast as matrix воспроизводит ваши исходные результаты.

matrix(as.numeric(m)^c(.1, .1, .1, .3, .4), nrow = 2)
#     [,1]     [,2]     [,3]     [,4]     [,5]
#[1,]    1 1.071773 1.551846 1.148698 1.620657
#[2,]    1 1.231144 1.116123 1.148698 1.903654
0 голосов
/ 01 сентября 2018
m <- matrix(c(1,2,3,4,5,1,2,3,4,5), nrow=2, byrow=T) 
expnt <- c(.1, .1, .1, .3, .4)

# option 1
m ^ rbind(expnt, expnt)

# option 2
m ^ matrix(rep(expnt, each=2), nrow=2)

# more generalized (any number of rows) version of option 2 
nr <- nrow(m)
m ^ matrix(rep(expnt, each=nr), nrow=nr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...