【问题标题】:Construct a list of matrices from a list of vectors从向量列表构造矩阵列表
【发布时间】:2014-03-21 14:31:49
【问题描述】:

我正在尝试使用 lapply 将向量列表转换为矩阵列表。

恐怕在我的搜索中找不到任何帮助!

我知道这可以通过循环列表的长度来解决,但我一直在尝试更改我的代码以尽可能避免循环。

现实世界的示例比下面的玩具示例具有更大的跨度,因此我正在尝试编写高效的代码。

SparseIndicies <- matrix(0, 100, 4)

SparseIndicies[, 1] <- rep(1:5, 20) #Assign a group (this is what we want to partition     on)
SparseIndicies[, 2] <- sample(1:10, 100, replace=TRUE)
SparseIndicies[, 3] <- sample(1:10, 100, replace=TRUE)
SparseIndicies[, 4] <- runif(100, 0, 1)

#Above replicates my data structure, albeit randomly

TransitionIndicies <- split(SparseIndicies, as.factor(SparseIndicies[, 1]))
#We now have a list of transition values for each 'group' - though this is now in vector format


#We can do it explicitly for each list item
FirstTransitionIndicies <- matrix(TransitionIndicies[[1]], nrow=20, ncol=4)

#The below falls over with:
#Error in match.fun(FUN) : 
#  'matrix(TransitionIndicies, nrow = 20, ncol = 4)' is not a function, character or symbol

NewTransitionIndicies <- lapply(TransitionIndicies, matrix(TransitionIndicies, nrow=20, ncol=4))

仅供参考:上面的第 2 列和第 3 列用于创建具有第四列值的稀疏矩阵。

FirstTransitionMatrix <- sparseMatrix(FirstTransitionIndicies[, 2], FirstTransitionIndicies[, 3], x=FirstTransitionIndicies[, 4]) 

非常感谢您提供的任何帮助或您可以为我提供的资源!

【问题讨论】:

    标签: r matrix lapply


    【解决方案1】:

    我想你想用:

    lapply(TransitionIndicies, function(x) matrix(x, nrow=20, ncol=4))
    

    您没有为 lapply 指定函数,这里的错误消息非常有用。

    你也可以使用(不那么明确):

    lapply(TransitionIndicies, matrix, nrow=20, ncol=4)
    

    【讨论】:

    • 感谢您的回答 - 我想我需要了解如何分配应用功能。从来没有真正理解过语法(现在感觉很傻......):)