通过将向量传递给rcpp中的函数来修改向量

时间:2020-01-28 00:16:36

标签: r rcpp

我正在尝试解决Rcpp中的word break problem。我唯一要做的事情是将所有可能的解决方案放入StringVector的向量中,而不是在屏幕上打印出来。我试图将一个名为container的StringVector向量传递给该函数。找到新的解决方案后,将其推回container。但是,这不起作用。调用函数后,容器仍然为空。如果修改更改了向量的长度,似乎Rcpp不允许``就地修改''。有人知道我在做什么错吗,或者我应该如何实现呢?非常感谢!

这是我的代码:

// [[Rcpp::export]]
String paste_strings(StringVector x, int begin, int end) {
  String out;
  for (int i=begin; i < end + 1; i++) {
    out += x[i];
    out += "\t";
  }
  return out;
}

// [[Rcpp::export]]
bool word_in_dict(String x, StringVector dict) {
  int n_word = dict.size();
  for (int i = 0; i < n_word; i++) {
    if (x == dict[i]) {
      return true;
    }
  }
  return false;
}

// [[Rcpp::export]]
void seq_seg_util_cpp(StringVector x, StringVector dict, StringVector prev_out, std::vector<StringVector> container) {
  int n = x.size();

  for (int i = 0; i < n; i++) {
    String prefix = paste_strings(x, 0, i);
    if (word_in_dict(prefix, dict)) {
      prev_out.push_back(prefix);
      if (i == (n-1)) {
        container.push_back(prev_out);
        // Rcout << prev_out << "\n";
        return;
      }
      StringVector new_x;
      for (int j = i+1; j < n; j++) new_x.push_back(x[j]);
      seq_seg_util_cpp(new_x, dict, prev_out, container);
    }
  }
}

// [[Rcpp::export]]
void seq_seg_cpp2(StringVector x, StringVector dict, std::vector<StringVector> container) {
  StringVector prev_out = StringVector::create();
  seq_seg_util_cpp(x, dict, prev_out, container);
}

在R中,

> x <- c("a", "b", "c")
> dict <- c("a\t", "b\t", "c\t", "b\tc\t")
> all_splits <- list()
> seq_seg_cpp2(x, dict, all_splits)
> all_splits
list()

0 个答案:

没有答案