我正在尝试使用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))
FYI:上面的第2和第3列用于创建具有第四列值的稀疏矩阵。
FirstTransitionMatrix <- sparseMatrix(FirstTransitionIndicies[, 2], FirstTransitionIndicies[, 3], x=FirstTransitionIndicies[, 4])
非常感谢您提供的任何帮助,或者您可以指向我的资源!
答案 0 :(得分:1)
我想你想用:
lapply(TransitionIndicies, function(x) matrix(x, nrow=20, ncol=4))
你没有为lapply
指定一个函数,这里的错误信息非常有用。
您也可以使用(不太明确):
lapply(TransitionIndicies, matrix, nrow=20, ncol=4)