【问题标题】:Changing 'names' attributes of list更改列表的“名称”属性
【发布时间】:2011-09-29 05:33:33
【问题描述】:

您好,我正在分析一些数据并尝试使用包含必须以这种方式格式化的对象的包。我从未见过这种格式,也不知道如何生成它。当我在 R 中调用该对象时,这是一个奇怪的对象:

> a
     A      B          C            D         E          F 
0.00000000 1.34529412 0.31571429 1.26327103 0.32615385 1.12585586 

这里是这个对象a的一些属性:

> str(a)
 Named num [1:6] 0 1.345 0.316 1.263 0.326 ...
 - attr(*, "names")= chr [1:6] "" "A" "B" "C" ...

> class(a)
[1] "numeric"

我可以使用标准的 write.csv 命令将“a”写入 .csv 格式,它可以很好地用两列格式化,一列是字符,另一列是数字。当我尝试使用 read.csv 在 R 中读回它时,它会正确地将其作为具有两列的数据框返回。但是,我尝试使用的函数不喜欢数据框格式,而是更喜欢“a”的任何格式。

所以可以举个例子数据集比如:

> L <- c("A","B","C","D","E","F")
> R <- c(0.00000000,1.34529412,0.31571429,1.26327103,0.32615385,1.12585586 )
> T <- list(L=L,R=R)
> Example <- as.data.frame(T)
> Example
  L     R
1 A 0.00000000
2 B 1.34529412
3 C 0.31571429
4 D 1.26327103
5 E 0.32615385
6 F 1.12585586 

然后把它变回这个?

     A      B          C            D         E          F 
0.00000000 1.34529412 0.31571429 1.26327103 0.32615385 1.12585586 

有这些属性?

  > str(a)
     Named num [1:6] 0 1.345 0.316 1.263 0.326 ...
     - attr(*, "names")= chr [1:6] "" "A" "B" "C" ...

    > class(a)
    [1] "numeric"

感谢您的帮助!

【问题讨论】:

  • 这是一种相当常见的结构,即(可以说是)一个命名的数字向量。 “names”属性在 R 中无处不在。建议您阅读 ?names

标签: r attributes custom-attributes names


【解决方案1】:

我认为这是您正在寻找的东西:

newExample <- Example$R
names(newExample) <- Example$L

【讨论】:

  • 哇....我没想到这么简单!非常感谢,也感谢 Dwin 告诉我接下来要检查的地方。
【解决方案2】:

您应该学习使用 save(),而不是使用 write.table() 或 write.csv() 写入磁盘。然后您可以放心,当您重新加载()对象时,您将获得正确构造的副本。如果您需要以 ASCII 可读格式查看对象,可以使用 dump()。

【讨论】:

    【解决方案3】:
    R <- t(Example$R)
    L <- t(Example$L)
    names(R) <- L
    str(R)
    

    num [1, 1:6] 0 1.345 0.316 1.263 0.326 ... - attr(*, "names")= chr [1:6] "A" "B" "C" "D" ...

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 1970-01-01
      • 2017-06-24
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多