【问题标题】:R: Convert array to matrix with one rowR:将数组转换为一行矩阵
【发布时间】:2019-11-04 22:31:26
【问题描述】:

鉴于foomock,有没有办法让foo 作为类matrix 而不是array

调用as.matrix() 会将foo 放入错误的结构中。 我想让foo 成为matrix,只有一行而不是两行。

foo = structure(c(0.729504668890744, 0.190464932275543, 0.0800303988337127), 
              .Dim = c(1L, 3L, 1L), 
              .Dimnames = list(NULL, c("A", "B", 
                                       "C"), "NA"))
class(foo[, , 1L])
#> [1] "numeric"
print(foo[, , 1L])
#>         A         B         C 
#> 0.7295047 0.1904649 0.0800304


mock = structure(c(0.550876469322338, 0.729504668890744, 0.342833178276825, 
                 0.190464932275543, 0.106290352400837, 0.0800303988337127), 
               .Dim = c(2L, 
                        3L, 1L), 
               .Dimnames = list(NULL, c("A", "B", "C"), 
                                "NA"))

class(mock[, , 1L])
#> [1] "matrix"
print(mock[, , 1L])
#>              A         B         C
#> [1,] 0.5508765 0.3428332 0.1062904
#> [2,] 0.7295047 0.1904649 0.0800304

# matrix conversion does not result in desired structure

as.matrix(foo[, , 1L])
#>        [,1]
#> A 0.7295047
#> B 0.1904649
#> C 0.0800304

reprex package 创建于 2019-11-04 (v0.3.0)

【问题讨论】:

  • 试试array(c(foo), dim(foo)[-3], dimnames = dimnames(foo)[1:2])
  • t(foo[,,1L])

标签: r arrays matrix type-conversion


【解决方案1】:

可以使用矩阵转置,base::t():

t(foo[,,1L])
#>              A         B         C
#> [1,] 0.7295047 0.1904649 0.0800304

class(t(foo[,,1L]))
#> [1] "matrix"

【讨论】:

  • 谢谢。这适用于foo,但会混淆mock 的暗名:t(mock[,,1L])
  • @pat-s 好吧,基于这一行 -- "给定 foo 和 mock,有没有办法让 foo 作为类矩阵而不是数组?" --我以为您只对将foo 转换为matrix 感兴趣。无论如何,很高兴 akrun 的回答对您有用。正如您在评论中提到的,他们的答案是通用的。干杯。
  • 是的,我错过了提到解决方案在最好的情况下应该是 nrow-agnostic。尽管这只是一个额外的好处。我也给你投票了,谢谢你的回复!
【解决方案2】:

这是array的选项

array(c(foo), dim(foo)[-3], dimnames = dimnames(foo)[1:2])

【讨论】:

  • 谢谢!这以通用方式工作,因此nrow(foo) 不会影响结果。
  • 看起来c() 没有必要
  • 为什么是array 而不是matrix? -- matrix(mock, dim(mock)[-3], dimnames = dimnames(mock)[1:2])
  • @M-- array 更通用,可以创建 n 维,而 matrix 仅 2D
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多