3

我正在为我正在处理的这个项目制作一个辅助函数,我需要从一组数据中得出百分位数。

在某些情况下,我将对条目向量进行百分率,这相当容易。在其他情况下,我将对矩阵中的条目进行百分比计算。

过程相似,但不同。我希望能够区分作为输入给出的内容(无论是向量还是矩阵),所以我知道什么操作是合适的。

我想过用输入的尺寸做点什么。但是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来测试矩阵,但我认为可能有更好的选择。(现在我在这里……)

有什么想法吗?

4

2 回答 2

5

似乎您想忽略任何只有一个级别的维度,所以drop是合适的:

if(is.null(dim(drop(x)))) {
  # do vector stuff
} else {
  # do matrix/array stuff
}
于 2013-08-09T14:19:21.183 回答
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
于 2013-08-09T15:57:23.733 回答