我应该使用data.frame还是matrix?
什么时候应该使用data.frame
,什么时候使用matrix
更好?
两者都保持矩形格式的数据,所以有时不清楚。
什么时候使用哪种数据types有什么一般的经验法则?
部分答案已经包含在您的问题中:如果列(variables)可以预期为不同types(数字/字符/逻辑等),则使用数据框。 matrix是用于相同types的数据。
因此,如果您有相同types的数据,则selectmatrix/数据框仅有问题。
答案取决于你将如何处理data.frame / matrix中的数据。 如果它将被传递给其他函数,那么这些函数的期望types的参数决定了select。
也:
matrix更有记忆效率:
m = matrix(1:4, 2, 2) d = as.data.frame(m) object.size(m) # 216 bytes object.size(d) # 792 bytes
如果你打算做任何线性代数types的操作,matrix是必需的。
如果您经常通过名称(通过紧凑的$操作符)引用其列,则数据框更加方便。
数据框架也恕我直言,更好地报告(打印)表格信息,因为您可以分别应用格式到每个列。
@Michal没有提到的一点是,不仅是一个matrix小于等价的数据框,使用matrix可以使你的代码比使用数据框更有效率,通常也是如此。 这是内部的一个原因,很多R函数会强制dataframe中的数据。
dataframe通常要方便得多; 一个并不总是只有primefaces块的数据。
请注意,你可以有一个字符matrix; 你不需要有数字数据在R中build立一个matrix。
在将dataframe转换为matrix时,请注意,有一个data.matrix()
函数,它可以根据内部级别将它们转换为数值来适当地处理因素。 如果任何因子标签是非数字的,则通过as.matrix()
将产生一个字符matrix。 比较:
> head(as.matrix(data.frame(a = factor(letters), B = factor(LETTERS)))) a B [1,] "a" "A" [2,] "b" "B" [3,] "c" "C" [4,] "d" "D" [5,] "e" "E" [6,] "f" "F" > head(data.matrix(data.frame(a = factor(letters), B = factor(LETTERS)))) a B [1,] 1 1 [2,] 2 2 [3,] 3 3 [4,] 4 4 [5,] 5 5 [6,] 6 6
我几乎总是使用数据框来处理数据分析任务,因为我经常使用的不仅仅是数字variables。 当我为包编写函数时,我几乎总是强制matrix,然后将结果格式化为dataframe。 这是因为dataframe很方便。
@Michal:matrix实际上不是更高效的内存:
m <- matrix(1:400000, 200000, 2) d <- data.frame(m) object.size(m) # 1600200 bytes object.size(d) # 1600776 bytes
…除非你有很多列:
m <- matrix(1:400000, 2, 200000) d <- data.frame(m) object.size(m) # 1600200 bytes object.size(d) # 22400568 bytes
matrix实际上是一个具有附加方法的向量。 而data.frame是一个列表。 区别在于vectorvs列表。 为了计算效率,坚持matrix。 如果你必须使用data.frame。