我应该使用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。