【问题标题】:Distinguishing a vector from a matrix in R将向量与 R 中的矩阵区分开来
【发布时间】:2013-08-09 13:57:04
【问题描述】:

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

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

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

我想对输入的维度做一些事情。但是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 的条件来测试矩阵,但我认为可能有更好的选择。 (现在我在这里……)

有什么想法吗?

【问题讨论】:

  • 你可能会使用?is.vector?is.matrix
  • 这和is.matrix(matrix(1,1,2)) = TRUE有同样的问题,但它的尺寸是c(1,2)所以它在技术上仍然是一个向量
  • 那么也许:is.vector(x) | min(dim(x)) > 1?
  • 是的,我认为is.vector(x) | min(dim(x)) == 1 应该可以工作。我想知道是否有更好的东西,但它可能不会变得更好哈哈。谢谢
  • ncol(x)>1 | nrow(x)>1 也应该完成这项工作

标签: r matrix vector


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我最终(针对这个特定问题)找到了解决所有这些问题的方法。但是,我不知道那个功能,它是一个很好的功能..
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2015-04-23
    • 2021-12-04
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多