【问题标题】:how to get rid of empty dimnames in a matrix如何摆脱矩阵中的空dimnames
【发布时间】:2015-07-22 11:29:24
【问题描述】:

当我显示它们时,我有两个看起来相同的矩阵。它们都是矩阵:

> is.matrix(z)
[1] TRUE
> is.matrix(z1)
[1] TRUE

attributes() 显然不同,其中一个看起来仍然是一个列表,并显示多行:

> attributes(z)
$dim
[1]  54 252

> attributes(z1)
$dim
[1]  55 252

$dimnames
$dimnames[[1]]
NULL

$dimnames[[2]]
NULL

后者在任何下游应用程序中都会给我一个错误。额外的行似乎是一个单独的问题(?)所以我正在调查,但有没有办法摆脱$dimnames 信息?

【问题讨论】:

  • dimnames 的存在不太可能给您带来错误。它们很可能是由其他问题引起的。
  • 哦,好的……这些信息本身就很有帮助,非常感谢您的评论。确实,即使消除了暗名,我仍然会收到错误。
  • 您应该尝试构建一个重现错误的最小示例,然后发布另一个问题。
  • 我想你也应该赞成/接受你收到的答案,因为你要求消除dimnames,而答案实际上就是这样做的。人们已经浪费了一些时间来帮助你,我想他们应该得到一些奖励(即使这不能解决你的实际问题)。
  • 对不起,我正要这样做...谢谢你提醒我,我刚刚浪费了大家的时间...

标签: r list matrix attributes


【解决方案1】:

这很简单:

dimnames(z1) <- NULL

用以下代码测试:

z <- z1 <- matrix(1:100, nrow = 10)
dimnames(z1) <- list(NULL, NULL)
attributes(z)
# $dim
# [1] 10 10
attributes(z1)
# $dim
# [1] 10 10

# $dimnames
# $dimnames[[1]]
# NULL

# $dimnames[[2]]
# NULL

dimnames(z1) <- NULL
attributes(z1)

# $dim
# [1] 10 10

现在我的问题是,空的 dimnames 属性从何而来?

【讨论】:

  • 谢谢!其中一个矩阵是由rbind() 在多个数据帧的某些列上创建的,而另一个我正在测试一种将给定文件夹中的所有 csv 文件自动读取到列表中的方法,如下所述:stackoverflow.com/questions/31558630/…
  • 正如@nicola 建议的那样,persp() 即使在消除了暗名之后仍然不想要我的矩阵。 is.numeric() 给我TRUE
【解决方案2】:

你可以这样尝试:

mat <- matrix(1, ncol = 1, dimnames = list(NULL, NULL))
attributes(mat)
# $dim
# [1] 1 1
# 
# $dimnames
# $dimnames[[1]]
# NULL
# 
# $dimnames[[2]]
# NULL

attr(mat, "dimnames") <- NULL
attributes(mat)
# $dim
# [1] 1 1

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2010-11-08
    • 2020-11-06
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多