R seqdist中的内存瓶颈?

R seqdist中的内存瓶颈?,r,sequence,traminer,R,Sequence,Traminer,seqdist()中是否可能存在内存瓶颈 我是一名研究人员,在一台64 gb内存的Windowsx64计算机上处理寄存器数据。我们的数据由60000人组成,目前我正在处理一个大约有220万行拼写格式的数据。我无法在其上运行seqdist(method=“OM”,indel=1,sm=“TRATE”,with.missing=TRUE,full.matrix=FALSE),错误消息与相同,其中重要部分似乎指向内存不足:“不允许使用负长度向量” 好的,但是seqdist()似乎没有利用我的整个RAM

seqdist()中是否可能存在内存瓶颈

我是一名研究人员,在一台64 gb内存的Windowsx64计算机上处理寄存器数据。我们的数据由60000人组成,目前我正在处理一个大约有220万行拼写格式的数据。我无法在其上运行seqdist(method=“OM”,indel=1,sm=“TRATE”,with.missing=TRUE,full.matrix=FALSE),错误消息与相同,其中重要部分似乎指向内存不足:“不允许使用负长度向量”

好的,但是seqdist()似乎没有利用我的整个RAM。现在我在40000人的样本上运行它,它似乎通过了,但R使用的RAM少于2GB。如果我对60000人运行seqdist(),就会得到错误

可能有2^31-1的大小限制吗

计算ward集群很容易利用所有可用的RAM。我已经让它使用了高达40GBS的RAM,这至少证明了R能够利用大量的RAM


编辑:最大案例数正好是46341。警告:如果大小是偶然的,那么内存会被消耗。如果通过计算(seq1/seq2)来比较序列复杂度^2,我们发现60000个样本中有40000个样本的复杂度略低于总样本的一半。如果此示例确实需要2 GB的内存来计算距离,并且存在4gb限制,则60000是太大的数据。是的,R向量被限制为2^32-1,并且贡献包中的代码通常使用假定向量小于或等于该长度的旧API;当包看到一个太长的向量并且没有检查它时,就会发生错误。我不熟悉您使用的特定软件包,因此没有解决方案。基本上,尽管它听起来像你想要一个不需要n^2/2距离的算法,不管R的向量表示法有什么限制。由于这一点,情况有一个限制,就是n=46341。不管矩阵是否完整,我不能超过46341=sqrt(2^31-1)。顺便说一句,我不知道为什么我的初始示例不会像我的人工示例那样消耗内存(你需要将46342更改为46341或更少才能工作)。参见上面的示例。您是否使用
WeightedCluster
来聚合类似的序列?这通常会大大减少数据集的大小。
library(TraMineR)

id <- seq(from=1, to=46342, by=1)
set.seed(234324)
time1 <- sample(seq(from=1, to=3, by=1), size=46342, replace=TRUE)
time2 <- sample(seq(from=1, to=3, by=1), size=46342, replace=TRUE)
time3 <- sample(seq(from=1, to=3, by=1), size=46342, replace=TRUE)

testdata <- data.frame(id, time1, time2, time3)

testseq <- seqdef(testdata, 2:4)

testdist <- seqdist(testseq, method="OM", indel=1, sm="TRATE", full.matrix=FALSE)