我的问题如下。我需要为27个抽样序列生成二元结果的组合,即000000000000000000000000000,000000000000000000000000001,...,111111111111111111111111111。
在R中,我会使用expand.grid
执行此操作result <- expand.grid(rep(list(0:1), 27)) #Error, object too large for workspace
# 2^27 = 134217728 unique combinations
# write.table(result, "result.csv", row.names=F)
我的最终目标是保存生成的对象供以后使用。
有没有办法迭代计算result
对象的条目并通过追加保存?
知道如何实现这个目标吗?
答案 0 :(得分:0)
您也可以在C ++中使用std::bitset
(请参阅Changing integer to binary string of digits)。
在toBinString.cpp
:
#include <Rcpp.h>
#include <bitset>
using namespace Rcpp;
// [[Rcpp::export]]
std::string toBinString(int x){
std::string s1 = std::bitset< 27 >(x).to_string();
return s1;
}
在R中,执行:
> library(Rcpp)
> sourceCpp(file="toBinString.cpp")
> sapply(1:4,toBinString)
[1] "000000000000000000000000001" "000000000000000000000000010"
[3] "000000000000000000000000011" "000000000000000000000000100"
> toBinString(2^27-1)
[1] "111111111111111111111111111"
> strsplit(toBinString(2^27-1),"")
[[1]]
[1] "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
[20] "1" "1" "1" "1" "1" "1" "1" "1"
或者,使用cppFunction
:
cppFunction('std::string toBinString(int x)
{ return(std::bitset<27>(x).to_string()); }',
includes="#include <bitset>")