2012-01-14 24 views
3

我发现了一些关于this线程中xts字段表示的信息,但我仍不清楚为什么xts是索引+矩阵。为什么不是索引+数据框?在使用因子和数字列时,这不会让您有更大的灵活性吗?为什么将xts实现为矩阵而不是数据框?

一旦我将数据加载到文本文件中,大部分工作就是对全套或时间序列的子集执行数字操作。为此,索引工作得很好,但我不得不通过诸如data.frame(data.matrix(myxts))之类的调用来提取因子和数字列。

另外我发现使用$符号比矩阵索引更方便,虽然这是一个非常不同的问题。例如:

lm(myxts$Res ~ myxts$ThisVar + myxts$ThatVar) 

是很容易,

lm(myxts[, "Res"] ~ myxts[, "ThisVar"] + myxts[, "ThatVar"]). 

回答

6

XTS写使用矩阵而非data.frame因为:

  1. 它是动物园的一个子类,这是动物园如何对象是结构化的,并且
  2. 矩阵对象比data.frames有更好的性能。

你的第二个问题可以通过使用data=参数lm或更一般地,可以解决使用with

with(myxts, lm(Res ~ ThisVar + ThatVar)) 
+0

这个回答我的问题,而是如何昂贵是data.matrix()调用处理数字?它是否不能达到在字符串中使用字符矩阵与数据框的目的,从而获得更好的性能? – 2012-01-14 15:27:12

+0

我在挠我的脑袋。矩阵(任何类型)中都没有因子变量,因为矩阵对象会除去名称和维度之外的所有属性。我相信你错过了Joshua所做的一点:你不需要在xts对象周围包装任何'data.frame'或'data.matrix'来将它的数值变成'lm',当它使用'与'或作为数据参数传递给'lm'。 – 2012-01-14 15:37:10

+3

另外'动物园'被设计为一个增强的ts类(在R的核心),而这个类又是基于矩阵的。看动物园设计小插曲:http://cran.r-project.org/web/packages/zoo/vignettes/zoo-design.pdf。请注意动物园支持'$'。例如'库(动物园); z < - zoo(cbind(a = 1:3,b = 4:6)); z $ a'。顺便说一下,矩阵和数据帧之间的性能差异非常显着。 – 2012-01-14 15:42:59

相关问题