【发布时间】:2016-04-14 12:17:28
【问题描述】:
我必须遵循以下代码:
WBP2=lapply(1:2500,function(j){as.data.frame(lapply(1:10000,function(i)
{rowSums(data.frame((mapply(`*`,Theta[[j]],t(W[i,]),SIMPLIFY=FALSE))))}))})
W 是一个 80 列和 10000 行的矩阵,Theta 是 2500 个 1000 行和 80 列的矩阵的列表。我们的目标是为每 2500 个模拟创建 10000 个数据帧。每个 data.frame 将是 W (W[i,]) 的一行乘以 theta[[j]] 的所有行的结果(因此是 80 列和 1000 行的组合)。我们只需要这个投资组合的每一行的总和,因此需要一个一列和 1000 行的 data.frame)
这是一个可重现的代码
W=matrix((1:80), nrow =10, ncol=4)
theta= lapply(1:5,function(j){matrix((41:60),nrow=5,ncol=4)})
WBP=lapply(1:5,function(j){as.data.frame(lapply(1:10,function(i)
{rowSums(data.frame(as.matrix(theta[[j]])%*%as.numeric(t(W[i,]))))}))})
View(WBP[[1]])
如你所见,它很重,我的电脑无法实现。
有没有什么方法可以让它更高效、更省时?
谢谢!!!
【问题讨论】:
-
用文字解释你的代码做了什么
-
看起来像一些线性代数乘法。什么是数学等价物?
-
t(W[i,])有什么用,因为它是1、80维的矩阵,即使转置后也会产生相同维数的结果? -
我猜 theta' * W?
-
我认为您需要提供一个关于如何生成矩阵的可重现示例(最小化版本)。例如,您想要的数据减少到 W 为 4 列 10 行,Theta 为 10 个 5 行的矩阵,然后是您期望的结果。也就是说,每个人都可以在数据上运行他们的解决方案,而您可以进行微基准测试。
标签: r