我需要遍历长度为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
z
种0
矩阵,我必须将它们全部存储起来在记忆中一次。
避免这种情况的一个选择是迭代从g^n - 1
到g
的所有整数;将其转换为基数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>
答案 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
}
}
}