使用R中两个列表中的数据创建一个特殊矩阵

时间:2015-12-11 23:48:50

标签: r

我这里有一个最小的样本数据来理解我的最终矩阵:

test <- list( c(1, 2, 3, 4) )
test2 <- list( c(2, 3) )

我的矩阵应该是:

2 4 6 8
3 6 9 12

它就像一个循环的nestes。我遍历每一行,并在每一行中使用它的值并将其与列值相加。

几个小时后,我有这个:

sapply(2, function(j) lapply(seq_along(test), function(i) test[[i]] * test2[[i]][j]))

它给出了最终模拟的第二行:(在sapply之后行的参数为'2')

[[1]]
[1]  3  6  9 12

可以使用seq_along(test2)完成越过行,但我不知道如何在每行之后保存数据...我上次测试这个:..并且失败..

a=matrix(data=0, nrow=2, ncol=4)
lapply(seq_along(test2), function(k) a[k,]<-unlist(sapply(2, function(j) lapply(seq_along(test), function(i) test[[i]] * test2[[i]][j])) ) )

输出:

[1]  3  6  9 12    

稍后,我想在输入列表中有更多向量,并重复在顶部描述的洞穴动作。

2 个答案:

答案 0 :(得分:1)

你的意思是矩阵乘法?快速举例:

> t(matrix(unlist(test)) %*% matrix(unlist(test2), nrow = 1))
     [,1] [,2] [,3] [,4]
[1,]    2    4    6    8
[2,]    3    6    9   12

答案 1 :(得分:1)

我们可以在outer unlist

之后使用list
t(outer(unlist(test), unlist(test2)))
#      [,1] [,2] [,3] [,4]
#[1,]    2    4    6    8
#[2,]    3    6    9   12