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"
2)在R中将数据帧做成面向列(而不是面向行)的结构的设计决定是什么?
data.frame是列向量的列表。
is.atomic(df[[1]]) # -> TRUE mode(df[[1]]) # -> [1] "character" mode(df[[3]]) # -> [1] "numeric"
向量只能存储一种对象。“面向行”的data.frame将要求数据帧由列表组成。现在想象一下操作的性能如何
df[[1]][20000]
请注意,基于随机访问的向量为O(1),列表的为O(n),请注意基于列表的数据帧。
3)任何对相关设计文档或数据结构设计文章的引用将不胜感激。
http://adv-r.had.co.nz/Data-structures.html#data-frames
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"
2)在R中将数据帧做成面向列(而不是面向行)的结构的设计决定是什么?
data.frame是列向量的列表。
is.atomic(df[[1]]) # -> TRUE mode(df[[1]]) # -> [1] "character" mode(df[[3]]) # -> [1] "numeric"
向量只能存储一种对象。“面向行”的data.frame将要求数据帧由列表组成。现在想象一下操作的性能如何
df[[1]][20000]
请注意,基于随机访问的向量为O(1),列表的为O(n),请注意基于列表的数据帧。
3)任何对相关设计文档或数据结构设计文章的引用将不胜感激。
http://adv-r.had.co.nz/Data-structures.html#data-frames