R:创建一个长度为m的向量矩阵,每个元素最多出现p个元素&;通过内存限制设置p?
我如何使用R来R:创建一个长度为m的向量矩阵,每个元素最多出现p个元素&;通过内存限制设置p?,r,algorithm,memory,permutation,R,Algorithm,Memory,Permutation,我如何使用R来 计算中的行数,以及 有效地创建一个矩阵,排列,这样 包含长度为m的向量中元素1:n的每个排列的行,对于n
m
的向量中元素1:n
的每个排列的行,对于n
,其中1:n
的每个元素最多出现p
次。顺序元素确实很重要
根据这个公式,我如何确定生成的矩阵是否在R的向量和矩阵大小限制内,以及我自己的计算机的ram限制内,而不是运行它以查看它是否会崩溃
具体来说,对于给定的m
和n
,如何计算允许的最大p
例如,使用m=20
和n=11
,使用expand.grid()
而没有p
限制,问题肯定会崩溃-我刚刚收到以下消息:
“错误:无法分配大小为762939.5 Gb的向量”
我只有22 GB的ram—如果我的小数点正确的话,是要求的千分之一。我不明白。你能展示一下你正在用
展开.grid
做什么吗?如果您执行类似于do.call(expand.grid,rep(list(1:3),5))
的操作,那么答案很简单。行数是3^5。是的,我可以计算n个对象排列的行数m次是为了增加n个对象最多出现p次的限制。如果没有这个限制,我无法创建一个矩阵,将11个对象排列20次,允许重复并将顺序视为相关,因为这是一个很大的问题。我希望将其限制在任何元素不允许出现超过三到四次的情况下,可以将其缩减到可管理的大小,但有了此限制,我不确定如何计算行数或内存量。我的11个对象20次排列的代码如下,但如果当时我没有半睡,在我按下返回键之前,我就知道这是不可能运行的。或者,不,这实际上是20个物体被选择了11次。perM演示您如何尝试实现p
(它是确定性的还是随机的?)。如果使用expand.grid
创建所有排列,则需要内存。没办法。但是,使用循环很容易做到这一点,如果这些循环不够快,不能满足您的需要,那么可以轻松地将它们转换为C(并使用Rcpp实现)。