我有472个矩阵,每个矩阵有405列(matrix1,...,matrix400),并且想拥有472个新矩阵,而该矩阵只有前244列。我怎样才能做到这一点?我试过了:
for (i in 1:472) {
assign(paste("new_matrix",i,sep=""), matrix[[i]][,c(1:244)])
}
我通过用一个标识符(对于组)将一个数据帧拆分来创建矩阵:
for (i in 1:472){
assign(paste("matrix", i, sep=""), subset(data, ID==i))
}
不知何故,我无法对每个矩阵说话,但是我不知道如何做到这一点。
您显然应该采用其他方法。分配所有单个矩阵不是一个好方法。但是这是您可以做到的一种方法...
mat1 <- matrix(1:6, 2, 3)
mat2 <- matrix(2:7, 2, 3)
example_func <- function(mati) {
mat_name <- as.name(paste0("mat", mati))
bquote(.(mat_name) <- .(mat_name)[ , 1:2])
}
for (i in 1:2) eval(example_func(i))
但是,使用eval
可能会很复杂,因为您必须非常注意环境,尤其是在函数内部使用时。作为示例,请尝试运行lapply(1:2, function(x) eval(example_func(x)))
而不是使用for循环,并查看结果之间的差异。
?split
。some_data <- data.frame(ID = rep(1:4, each = 4),
V1 = 1:16,
v2 = letters[1:16])
split(some_data, list(some_data$ID))
然后,您可以使用它lapply
来遍历子集并进一步迭代子集。或者更好的是,仅将原始data.frame子集化为所需的列,然后使用split
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句