2013-03-13 4 views
0

У меня есть список, R =R Умножение матриц

[[1]] 
    [,1] [,2] 
[1,] 100 0 
[2,] 0 100 

[[2]] 
      [,1]  [,2] 
[1,] 0.0006364031 0.2521204 
[2,] 0.2521204236 99.9993643` 

Я предположим, что делать F %*% R

  F 
[1,] 1 -6.264917e-04 
[2,] 1 1.575666e-04 

Как и в F[1,] матрицы умножаются R[[1]], F[2,] матрица умножается R[[2]]

Как я должен идти в бой?

Извините. Я думаю, что меня неправильно поняли. То, что я действительно хочу F[1,]%*%R[[1]]%*%t(F[1,]) и F[2,]%*%R[[2]]%*%t(F[2,]) @Sven Hohenstein

+0

Привет, ребята, спасибо за ответ. Если я хочу сделать F% *% R% *% t (F), есть ли простой способ сделать это? – ShinjiOno

+0

У меня есть ответ на ваш ответ. –

+1

Пожалуйста, не убивайте котят! http://stackoverflow.com/questions/15370947/store-or-print-results-for-t-test-in-for-loop-r#comment21720500_15370947 – GSee

ответ

6
mapply("%*%", as.data.frame(t(F)), R, SIMPLIFY = FALSE) 

$V1 
    [,1]  [,2] 
[1,] 100 -0.06264917 

$V2 
      [,1]  [,2] 
[1,] 0.0006761289 0.267877 

Update

Чтобы ответить на ваш второй вопрос:

lapply(R, function(x) F %*% x %*% t(F)) 

[[1]] 
      [,1]  [,2] 
[1,] 100.00004 99.99999 
[2,] 99.99999 100.00000 

[[2]] 
      [,1]   [,2] 
[1,] 0.0003597493 0.0005083061 
[2,] 0.0005083062 0.0007183373 

Update

Чтобы ответить на ваш обновленный вопрос:

mapply(function(x, y) y %*% x %*% as.matrix(y), R, as.data.frame(t(F)), 
     SIMPLIFY = FALSE) 

[[1]] 
    [,1] 
[1,] 100 

[[2]] 
      [,1] 
[1,] 0.0007183373 
+0

Считаете ли вы, что 'Reduce' можно использовать здесь как-то? Я всегда задаюсь вопросом о решении с 'Уменьшить', когда дело доходит до матрицы mul/add .. – Arun

+0

@Arun Я полагаю, это невозможно с' Reduce', потому что OP хочет умножить только две матрицы. «Уменьшить» может быть полезно, если необходимо использовать более двух аргументов для одного и того же оператора. –

+0

Я вижу ... спасибо. Когда я когда-нибудь пойму «Сократить»? :) – Arun

3
R <- list(matrix(c(100,0,0,100), 2), matrix(c(0.0006364031,0.2521204236,0.2521204,99.9993643), 2)) 
F <- matrix(c(1, 1, -6.264917e-04, 1.575666e-04), 2) 

lapply(1:2, function(x) F[x,] %*% R[[x]]) 
## [[1]] 
##  [,1]  [,2] 
## [1,] 100 -0.06264917 
## 
## [[2]] 
##    [,1]  [,2] 
## [1,] 0.0006761289 0.267877 
+0

(+1) почему это было downvoted? – Arun

+0

@Arun У меня раньше был неправильный код. –

+0

oh wow .. маленький комментарий был бы более уместным, ИМХО. – Arun

3

Просто, делая это:

> F[1,]%*%R[[1]] 
    [,1]  [,2] 
[1,] 100 -0.06264917 


> F[2,]%*%R[[2]] 
      [,1]  [,2] 
[1,] 0.0006761289 0.267877 

Был ли какой-то особый способ вы хотели хранящимся?

+0

Что делать, если список длинный, например. R [[1]] в R [[100]] и я хочу сделать это одной командой? – ShinjiOno

+0

и я хочу сделать F% *% R% *% t (F) вместо – ShinjiOno

+2

* Что делать, если список длинный, например. R [[1]] до R [[100]] и i wan сделать это по одной команде? * - на этот вопрос уже ответил ответ на ваш пост SO. –

Смежные вопросы