更改列表的“名称”属性

时间:2011-07-05 23:58:19

标签: r attributes custom-attributes names

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

> a
     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"

我可以使用标准的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"

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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”......