У меня есть следующий список 5x2
матриц:
l <- list(a=matrix(rnorm(10),nrow=5,ncol=2),
b=matrix(rnorm(10),nrow=5,ncol=2),
c=matrix(rnorm(10),nrow=5,ncol=2))
Например, первый элемент этого списка выглядит так:
$a
[,1] [,2]
[1,] -0.4988268 1.9881333
[2,] -0.2979064 1.5921169
[3,] -1.3783522 -1.4149601
[4,] 0.2205115 0.2029210
[5,] 1.2721645 0.2861253
Я хочу взять этоперечислите и создайте новую матрицу 5x2
, используя информацию из вектора v
:
v <- c("a","a","b","c","b")
Этот вектор является вектором-индикатором, который содержит информацию о том, как должна быть построена эта новая матрица.То есть, взять строку 1 из элемента списка a
, взять строку 2 из элемента списка a
и т. Д.
Можно сделать это через for
-loop, однако для моего приложения этонедостаточно эффективен, и я чувствую, что может быть более элегантное решение.Мой подход:
goal <- matrix(nrow=5,ncol=2)
for(i in 1:length(v)){
goal[i,] <- l[[v[i]]][i,]
}
goal
[,1] [,2]
[1,] -0.4988268 1.98813326
[2,] -0.2979064 1.59211686
[3,] 0.7715907 0.16776669
[4,] 0.2690278 0.02542766
[5,] 1.7865093 0.46361239
Спасибо!