在R中区分矢量和矩阵

时间:2013-08-09 13:57:05

标签: r matrix vector

我正在为我正在研究的这个项目制作一个帮助函数,我需要用一组数据来制作百分位数。

在某些情况下,我会识别一个条目向量,这很容易。在其他情况下,我将在矩阵中对条目进行识别。

过程类似,但不同。我希望能够区分作为输入给出的内容(无论是向量还是矩阵),因此我知道哪种操作是合适的。

我想过用输入的尺寸做些什么。但是dim(*vector*) = NULL,但是dim(matrix(1:15, 1,15)) = c(1,15)即使这是一个有争议的矢量。所以我不能用我的第一个想法

if(length(dim(objects)) == 2){*A MATRIX*}
else{*A VECTOR*}

我认为我可以添加min(dim(objects)) > 1的条件来测试矩阵,但我认为可能有更好的选择。 (现在我在这里......)

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

好像你想忽略任何只有一个级别的维度,所以drop是合适的:

if(is.null(dim(drop(x)))) {
  # do vector stuff
} else {
  # do matrix/array stuff
}

答案 1 :(得分:2)

为什么不使用prop.table进行操作?您可以获得行或列比例,如果您获得百分位数,则可以乘以100并舍入到所需的精度

> m <- matrix(1:9, 3)
> prop.table(m, 1)
           [,1]      [,2]      [,3]
[1,] 0.08333333 0.3333333 0.5833333
[2,] 0.13333333 0.3333333 0.5333333
[3,] 0.16666667 0.3333333 0.5000000
> prop.table(m,2)
          [,1]      [,2]      [,3]
[1,] 0.1666667 0.2666667 0.2916667
[2,] 0.3333333 0.3333333 0.3333333
[3,] 0.5000000 0.4000000 0.3750000

> round(100*prop.table(m, 1), 2) # rounded row percentages
      [,1]  [,2]  [,3]
[1,]  8.33 33.33 58.33
[2,] 13.33 33.33 53.33
[3,] 16.67 33.33 50.00