我正在为我正在研究的这个项目制作一个帮助函数,我需要用一组数据来制作百分位数。
在某些情况下,我会识别一个条目向量,这很容易。在其他情况下,我将在矩阵中对条目进行识别。
过程类似,但不同。我希望能够区分作为输入给出的内容(无论是向量还是矩阵),因此我知道哪种操作是合适的。
我想过用输入的尺寸做些什么。但是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
的条件来测试矩阵,但我认为可能有更好的选择。 (现在我在这里......)
有什么想法吗?
答案 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