【发布时间】:2016-03-30 15:42:23
【问题描述】:
问题
- R 中的数据框是否是列列表(在我的理解中,列表是对象序列)?
- R 中将数据框设为面向列(而非面向行)结构的设计决策是什么?
- 任何对相关设计文档或数据结构设计文章的参考将不胜感激。
我只是习惯于以行为单位/记录,并想知道为什么它是面向列的。或者如果我误解了什么,请提出建议。
背景
我曾认为数据框是一系列行,例如 (Ozone, Solar.R, Wind, Temp, Month, Day)。
> c ## data frame created from read.csv()
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
> typeof(c)
[1] "list"
但是,当 lapply() 应用于 c 以显示每个列表元素时,它是一列。
> lapply(c, function(arg){ return(arg) })
$Ozone
[1] 41 36 12 18 23 19
$Solar.R
[1] 190 118 149 313 299 99
$Wind
[1] 7.4 8.0 12.6 11.5 8.6 13.8
$Temp
[1] 67 72 74 62 65 59
$Month
[1] 5 5 5 5 5 5
$Day
[1] 1 2 3 4 7 8
没想到
[1] 41 190 7.4 67 5 1
[1] 36 118 8.0 72 5 2
…
【问题讨论】:
-
改用
apply(c,2, function(arg){ return(arg) })。而c是一个data.frame(参见class(c))。并且不要使用c作为变量名。这可能会有所帮助:stat.ethz.ch/pipermail/r-help/2008-August/171535.html 和 stackoverflow.com/questions/6258004/… -
向量具有单一模式,因此每一行不能是向量。但每一列都可以是一个向量。
-
@Pascal 使用
c作为对象名称的缺点不再适用。 -
@MatthewLundberg 是使用它的好理由吗?
-
如果你这样做,它曾经会造成麻烦。它现在不会造成不良影响,因此没有理由避免它。