R-数据框是列的列表吗?

mon*_*mon 0 r dataframe

  1. R中的数据框是否是列的列表(据我所知,列表是对象的序列)?
  2. 在R中将数据帧做成面向列(而非行)结构的设计决定是什么?
  3. 任何对相关设计文档或数据结构设计文章的引用都将受到赞赏。

我只是习惯将行作为一个单位/记录,并且想知道为什么它是面向列的。或者,如果我误解了一点,请提出。

背景

我以为数据帧是一系列的行,例如(臭氧,Solar.R,风,温度,月,日)。

> 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"
Run Code Online (Sandbox Code Playgroud)

但是,当对c应用lapply()以显示每个列表元素时,它是一列。

> 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
Run Code Online (Sandbox Code Playgroud)

我原以为是

[1]    41     190  7.4   67     5   1
[1]    36     118  8.0   72     5   2
…
Run Code Online (Sandbox Code Playgroud)

kli*_*ron 5

1)R中的数据帧是一列列表吗?

是。

df <- data.frame(a=c("the", "quick"), b=c("brown", "fox"), c=1:2)
is.list(df)        # -> TRUE
attr(df, "name")   # -> [1] "a" "b" "c"
df[[1]][2]         # -> "quick"
Run Code Online (Sandbox Code Playgroud)

2)在R中将数据帧做成面向列(而不是面向行)的结构的设计决定是什么?

data.frame是列向量的列表。

is.atomic(df[[1]])     # -> TRUE
mode(df[[1]])          # -> [1] "character"
mode(df[[3]])          # -> [1] "numeric"
Run Code Online (Sandbox Code Playgroud)

向量只能存储一种对象。“面向行”的data.frame将要求数据帧由列表组成。现在想象一下操作的性能如何

df[[1]][20000]
Run Code Online (Sandbox Code Playgroud)

请注意,基于随机访问的向量为O(1),列表的为O(n),请注意基于列表的数据帧。

3)任何对相关设计文档或数据结构设计文章的引用将不胜感激。

http://adv-r.had.co.nz/Data-structures.html#data-frames