通过所有可能性将整数转换为基数/迭代

时间:2017-03-18 14:54:21

标签: r

我需要遍历长度为n的向量的所有可能实现,每个元素都是从1到g的数字。这些中有g^n个; g通常是3,而n将会合理地让R处理。在每个实现中,我将计算一些f(z)(其中z是实现),并将其添加到运行总计(如果您想知道,则将分布的规范化常量添加)。

n=10的一个示例是c(1, 2, 3, 1, 2, 3, 1, 1, 2, 2)

我可以说某种expand.grid聪明并循环遍历每一行,但是是否可以在不将所有内容同时保存在内存中的情况下完成每个实现?

使用expand.grid(或类似)方法生成g^n * n z0矩阵,我必须将它们全部存储起来在记忆中一次。

避免这种情况的一个选择是迭代从g^n - 1g的所有整数;将其转换为基数n中的数字(从0到g-1将包含z个字符);然后添加一个以获得z的实现。但是,我找不到一个方便的(快速?)函数来从一个整数转换为一个给定的基数,除非那个基数碰巧是2个,6个或8个。

那么,有没有人知道如何将整数转换为z,或者我可以方便地在所有可能的cd /Applications/SoapUI-5.2.1.app/Contents/PlugIns/jre.bundle/Contents/Home mv jre jre.old ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/jre jre 上构建一个循环而不必同时将它们全部存储起来?< / p>

1 个答案:

答案 0 :(得分:1)

这是一种循环所有可能性的方法 - 不确定它有多快,但它肯定避免设置一个大数组

n <- 4
g <- 3
a <- rep(1,n) #initialise to a vector of 1s
while(max(a) < g + 1){
  cat(a,"\n") #insert your own function here
  a[1] <- a[1] + 1 #increment first element
  for(i in 2:n){ #this loop 'carries forward'
    if(a[i-1] > g){
      a[i-1] <- 1
      a[i] <- a[i] + 1
    }
  }
}