R:创建一个长度为m的向量矩阵,每个元素最多出现p个元素&;通过内存限制设置p?

R:创建一个长度为m的向量矩阵,每个元素最多出现p个元素&;通过内存限制设置p?,r,algorithm,memory,permutation,R,Algorithm,Memory,Permutation,我如何使用R来 计算中的行数,以及 有效地创建一个矩阵,排列,这样 包含长度为m的向量中元素1:n的每个排列的行,对于n

我如何使用R来

  • 计算中的行数,以及
  • 有效地创建一个矩阵,排列,这样
  • 包含长度为
    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实现)。