我想找到符合特定条件的矢量元素的所有组合.函数expand.grid返回所有可能的组合,而不检查特定条件.这是可能使用expand.grid功能后,测试特定条件,但在某些情况下可能的组合的数量太大与expand.grid生成它们.因此,有一个功能允许我在生成所有可能的组合时检查条件.
这是问题的简化版本:
A <- seq.int(12, from=0, by=1)*15
B <- seq.int(27, from=0, by=1)*23
C <- seq.int(18, from=0, by=1)*18
D <- seq.int(33, from=0, by=1)*10
out<-expand.grid(A,B,C,D) #out is a dataframe with 235144 x 4 as dimensions
idx<-which(rowSums(out)<=400 & rowSums(out)>=300) #Only a small fraction of 'out' is needed
results <- out(idx,)
Run Code Online (Sandbox Code Playgroud)
一句话,不。毕竟,如果您先验地知道哪些组合是理想的/不理想的,您可以将它们从扩展中排除,例如 expand.grid(A[A<20],B[B<15],...)。在一般情况下,我假设这是您真正的问题,您没有简单的方法来排除部分输入向量。
您可能只想编写一个多级循环来依次测试每个组合并保存或拒绝它。这会很慢(同样,除非你想出一些聪明的算法来预测全是真或假的区域)。因此,从长远来看,您可能最好使用一些对大型计算(和数据集)进行分区的 R 包,以避免超出内存限制。
既然我已经说了这一切,有人会发布一个包的链接,它正是这样做的:-(