【问题标题】:R - subsets of matrix gives incorrect dimensionR - 矩阵的子集给出不正确的维度
【发布时间】:2015-10-16 09:11:24
【问题描述】:

我是 R 的新手,但在解决这个问题很长一段时间后,我正在寻求帮助:

我有一个矩阵:

> is.matrix(Ls)
[1] TRUE

> Ls
       Start        Duration
       newrow_fin "1014507296" "133.313"
       newrow_fin "1014657293" "449.975"
       newrow_fin "1015523823" "566.614"
       newrow_fin "1017473690" "233.236"

我想将此矩阵子集为其他 3 个矩阵:

> int2_start
 [1] 1014174109
> int3_start
 [1] 1016639945
Ls1<-subset.matrix(Ls, (Ls[,1])<=int2_start) [,c(1,2)]
Ls2<-subset.matrix(Ls, (Ls[,1])>int2_start) [,c(1,2)]
Ls2<-subset.matrix(Ls2, (Ls2[,1])<=int3_start)  [,c(1,2)]
Ls3<-subset.matrix(Ls, (Ls[,1])>int3_start) [,c(1,2)]

它适用于 Ls1 和 Ls2。但是 Ls3 改变了格式。

> Ls1
 Start Duration
> Ls2
       Start        Duration
       newrow_fin "1014507296" "133.313"
       newrow_fin "1014657293" "449.975"
       newrow_fin "1015523823" "566.614"
> Ls3
   Start     Duration
       "1017473690"    "233.236"
> is(Ls1)
[1] "matrix"    "array"     "structure" "vector"
> is(Ls2)
[1] "matrix"    "array"     "structure" "vector"
> is(Ls3)
[1] "character"           "vector"              "data.frameRowLabels" "SuperClassMethod" 

我不明白。

【问题讨论】:

  • 您的矩阵中有任何数字。只有字符。
  • 如果我将代码更改为 Ls2int2_start) [,c(1,2)]。同样的问题
  • 应该是LS &lt;- as.numeric(LS)
  • 搜索正常,但是尺寸变化(Ls1&Ls2 与 Ls3 相比)是导致我的问题的原因。

标签: r matrix subset dimension


【解决方案1】:

默认情况下,[ 选择会尝试通过删除长度为 1 的维度来简化结果。如果您不希望这样做,请添加 drop = FALSE

test <- array(1, dim = rep(2, 3))
dim(test) # 3 dimensions
dim(test[1, ,]) # 2 dimensions
dim(test[1, 1,]) # 1 dimension
dim(test[1, , , drop = FALSE]) # 3 dimensions
dim(test[1, 1, , drop = FALSE]) # 3 dimensions

【讨论】: