for (i in 1:(nrow(S1))) { # 循环遍历每行中间的列 for (j in (n+1):(ncol(S1)-n)) { # 如果列数符合要求,将数据存入 sj_1 中 if (((j+n)-(j-n)+1) == n*2+1) { sj_1[i,] <- S1[i,(j-n):(j+n)] } } }查看这段代码,如何使每次循环出的结果都导出,最后汇成一个矩阵,请给出具体代码并逐步说明
时间: 2024-01-29 11:04:03 浏览: 67
我们可以在每次循环时将 sj_1 矩阵的第 i 行赋值为当前循环的结果,然后将结果保存到一个列表中。最后再将列表中的所有结果按行连接起来成为一个矩阵。
具体实现如下:
```
# 初始化一个空列表
result_list <- list()
for (i in 1:(nrow(S1))) {
# 创建一个空的 n×(2n+1) 的矩阵
sj_i <- matrix(NA, ncol = 2*n+1, nrow = n)
for (j in (n+1):(ncol(S1)-n)) {
if (((j+n)-(j-n)+1) == n*2+1) {
# 将 sj_i 的行向量设为当前循环的结果
sj_i <- S1[i,(j-n):(j+n)]
}
}
# 将 sj_i 添加到结果列表中
result_list[[i]] <- sj_i
}
# 将结果列表中的所有矩阵按行连接起来形成一个大矩阵
result_matrix <- do.call(rbind, result_list)
```
解释一下上面代码的实现过程:
1. 初始化一个空列表 result_list 用于保存每次循环的结果。
2. 外层循环遍历 S1 矩阵的每一行。
3. 在内层循环中,如果当前列数符合要求,则将 sj_i 的行向量赋为当前循环的结果。
4. 将 sj_i 添加到结果列表 result_list 中。
5. 循环结束后,使用 do.call() 函数将结果列表中的所有矩阵按行连接起来形成一个大矩阵 result_matrix。
阅读全文