RCPP是R语言的C++接口,可以用C++代码编写R函数并进行加速。以下是保留列表中不具有适当子集的向量的函数的RCPP实现:
#include
using namespace Rcpp;
// [[Rcpp::export]]
List keep_unique_vectors(List x) {
int n = x.size();
std::set > subsets;
std::vector indices;
for (int i = 0; i < n; i++) {
IntegerVector xi = x[i];
std::set subset;
for (int j = 0; j < xi.size(); j++) {
subset.insert(xi[j]);
}
bool unique = true;
for (std::set other : subsets) {
bool is_subset = true;
for (int value : subset) {
if (other.find(value) == other.end()) {
is_subset = false;
break;
}
}
if (is_subset) {
unique = false;
break;
}
}
if (unique) {
indices.push_back(i);
subsets.insert(subset);
}
}
List out(indices.size());
for (int i = 0; i < indices.size(); i++) {
out[i] = x[indices[i]];
}
return out;
}
该函数接受一个R列表x
,其中包含一组整数向量。返回一个列表,其中包含x
中不具有适当子集的向量。在C++中,我们使用std::set
来储存整数集合,并对每个输入向量生成一个集合。对于新向量,我们检查它是否为subsets
中的任何集合的子集。如果不是,则将其放入输出向量,并将其集合添加到subsets
中。在遍历x
中的所有向量之后,我们返回所有不具有适当子集的向量的列表。
上一篇:保留下拉菜单中的最后选定项
下一篇:保留先前变量和输出的信息