每次从R中的矩阵中检索3行(以及列的子集)

每次从R中的矩阵中检索3行(以及列的子集),r,R,我试图在矩阵上应用一个循环(matrixExample,如下所述),每次检索3行上的V1到V6列 matrixExample ID CHR SEGNUM GENOSEG V1 V2 V3 V4 V5 V6 [1,] "CHAR8" "1" "1" "102505" "1" "0" "2" "5" "0" "5" [2,] "LIMO9" "1" "1" "012505" "0" "1" "2" "5" "0" "5" [3,] "SIM10"

我试图在矩阵上应用一个循环(matrixExample,如下所述),每次检索3行上的V1到V6列

matrixExample
      ID      CHR SEGNUM GENOSEG  V1  V2  V3  V4  V5  V6 
 [1,] "CHAR8" "1" "1"    "102505" "1" "0" "2" "5" "0" "5"
 [2,] "LIMO9" "1" "1"    "012505" "0" "1" "2" "5" "0" "5"
 [3,] "SIM10" "1" "1"    "122505" "1" "2" "2" "5" "0" "5"
 [4,] "CHAR8" "1" "2"    "111520" "1" "1" "1" "5" "2" "0"
 [5,] "LIMO9" "1" "2"    "221520" "2" "2" "1" "5" "2" "0"
 [6,] "SIM10" "1" "2"    "222520" "2" "2" "2" "5" "2" "0"
 [7,] "CHAR8" "1" "3"    "501111" "5" "0" "1" "1" "1" "1"
 [8,] "LIMO9" "1" "3"    "501100" "5" "0" "1" "1" "0" "0"
 [9,] "SIM10" "1" "3"    "502011" "5" "0" "2" "0" "1" "1"
[10,] "CHAR8" "2" "1"    "102505" "1" "0" "2" "5" "0" "5"
[11,] "LIMO9" "2" "1"    "012505" "0" "1" "2" "5" "0" "5"
[12,] "SIM10" "2" "1"    "122505" "1" "2" "2" "5" "0" "5"
[13,] "CHAR8" "2" "2"    "111520" "1" "1" "1" "5" "2" "0"
[14,] "LIMO9" "2" "2"    "221520" "2" "2" "1" "5" "2" "0"
[15,] "SIM10" "2" "2"    "222520" "2" "2" "2" "5" "2" "0"
[16,] "CHAR8" "2" "3"    "501111" "5" "0" "1" "1" "1" "1"
[17,] "LIMO9" "2" "3"    "501100" "5" "0" "1" "1" "0" "0"
[18,] "SIM10" "2" "3"    "502011" "5" "0" "2" "0" "1" "1"
例如,从前3行开始,我想使用子矩阵进行一些矩阵计算:

"1" "0" "2" "5" "0" "5"
"0" "1" "2" "5" "0" "5"
"1" "2" "2" "5" "0" "5"
在这个计算之后,我需要转到第4到第6行

我尝试了以下代码:

 for(i in seq(1, dim(exampleDoubleSort)[1], 3))
{
  print(matrixExample[(i:i+2),c(4:10)]) # using print only as an example  
  # do some matrix calculations using the subset matrix
}
它只打印一行中的元素,而不打印三行的组合

如果我尝试跳出循环,我可以获得预期的结果

      print(matrixExample[(1:3),c(5:10)])

     V1  V2  V3  V4  V5  V6 
[1,] "1" "0" "2" "5" "0" "5"
[2,] "0" "1" "2" "5" "0" "5"
[3,] "1" "2" "2" "5" "0" "5"
请告诉我如何每次读取3行并检索矩阵子集以进行进一步计算,好吗? 如果我有30个how,我需要重试10个矩阵作为子集并执行10个计算。。。以函数为例进行计算

提前谢谢! 干杯


RV

您的问题在于行的索引,以及行索引向量的生成。查看
3:3+2
3:(3+2)
之间的输出差异,作为旁注,您可能最好使用
data.frame
而不是列表,因为您有不同类的值(字符/因子和数字)但是一个矩阵只能包含一个类,因此所有值都被强制为charactersHanks很多Heroka!解决了这个问题!干杯谢谢docendo discimus!很好的提示…这只是另一个使用
split
lappy(split(data,list(data$CHR,data$SEGNUM)),函数(x)作为.matrix(x[,-c(1:4)])的选项)
将数据作为
data.frame