修改RCPP列表::一个小节一个单独的函数的引用

问题描述 投票:0回答:2

我希望能够通过一个功能,修改Rcpp::List的子部分。由于Rcpp::List是指向一些R数据,我认为这将有可能做这样的事情:

void modifyList(Rcpp::List l) {
  l["x"] = "x";
}

// [[Rcpp::export]]
Rcpp::List rcppTest() {
  Rcpp::List res;
  res["a"] = Rcpp::List::create();
  modifyList(res["a"]);
  return res;
}

我希望得到尽可能rcppTest的返回值的列表与值“X”元素的“x”。返回的列表是空的。然而。

相反,如果我使用的签名modifyList(Rcpp::List& l),我得到一个编译错误

rcppTest.cpp:17:6: note: candidate function not viable: no known conversion from 'Rcpp::Vector<19, PreserveStorage>::NameProxy' (aka 'generic_name_proxy<19, PreserveStorage>') to 'Rcpp::List &' (aka 'Vector<19> &') for 1st argument

我怎么能修改通过功能的Rcpp::List的子部分?

c++ r rcpp
2个回答
3
投票

简而言之,通过参考修改的列表是不可能的。在这种情况下,您必须@RalfStubner从注释中指出返回Rcpp::List

EG

#include<Rcpp.h>

// Specified return type of List
Rcpp::List modifyList(Rcpp::List l) {
  l["x"] = "x";
  return l;
}

// [[Rcpp::export]]
Rcpp::List rcppTest() {
  Rcpp::List res;
  res["a"] = Rcpp::List::create();

  // Store result back into "a"
  res["a"] = modifyList(res["a"]);

  return res;
}

测试:

rcppTest()
# $a
# $a$x
# [1] "x"

0
投票

这工作:

// [[Rcpp::export]]
void modifyList(List& l, std::string i) {
  l[i]= "x";
}

// [[Rcpp::export]]
Rcpp::List rcppTest() {
  Rcpp::List res;
  res["a"] = Rcpp::List::create();
  modifyList(res,"a");
  return res;
}

并给出:

> rcppTest()
$`a`
[1] "x"

问题是你正在尝试:

error: invalid initialization of non-const reference of type 'Rcpp::List& {aka Rcpp::Vector<19>&}'
© www.soinside.com 2019 - 2024. All rights reserved.