2011-08-30 34 views
6

R中的arules包使用类'transactions'。所以为了使用功能apriori()我需要转换我现有的数据。我有一个矩阵2列大致1.6毫米行,并试图将数据转换是这样的:大数据从arules包转换为“transactions”

transaction_data <- as(split(original_data[,"id"], original_data[,"type"]), "transactions") 

其中original_data是我的数据矩阵。由于我使用的是具有64GB RAM的最大AWS亚马逊机器的数据量。过了一会儿,我得到

所得向量超过矢量长度限制在“AnswerType”

机器的内存使用情况仍是“唯一的”在60%以上。这是基于R的限制吗?有没有什么办法可以解决这个问题,而不是使用抽样?当仅使用1/4的数据时,转换工作正常。

编辑:正如所指出的,其中一个变量是一个因素而不是字符。更改转换后,处理得很快且正确。

+0

我玩过它多一点,当我减少了一点数据量,我得到错误 '错误unique.default(...)长度547601298是太大了哈希' 在文件unique.c中的系统代码R中显然有一些函数'MKsetup()'防止向量超过一定的长度。 – Marco

+0

你可以发布'str(original_data)'的结果吗?很高兴知道数据中是否存在某些问题。 – Iterator

+0

你可以生成一个假的,但代表性的例子? –

回答

3

我怀疑你的问题出现了,因为其中一个函数使用整数(而不是浮点数)来索引值。无论如何,尺寸不是太大,所以这是令人惊讶的。也许这些数据还有其他一些问题,例如字符作为因素?

总的来说,虽然,我真的建议使用内存映射文件,通过bigmemory,您还可以通过bigsplitmwhich分裂和过程。如果卸载数据适用于您,那么您还可以使用更小的实例大小并保存$$。 :)

+0

你说得对,其中一个变量是一个因子而不是char。我会看看'bigmemory'包,谢谢你的建议 – Marco