这是我在各种情况下遇到的问题的可重现示例。基本上我有一个 C++int
和一个 Rcpp IntegerVector
,我只想将一个整数加到另一个整数上并将其存储到一个新的IntegerVector
. 数字类型也会出现同样的问题,但现在让我们将其保留为整数。
library(inline)
set.seed(123)
x <- sample(1:100,5)
cpp_src <- '
Rcpp::IntegerVector xa = clone(x);
Rcpp::IntegerVector sa(s);
int currentSum = 12;
std::cout << sa[0] << " ";
std::cout << currentSum << " ";
Rcpp::IntegerVector remainingQuantity = sa[0] - currentSum;
std::cout << remainingQuantity << "\\n";
return remainingQuantity;
'
sumto <- cxxfunction( signature(x="integer", s="integer"), body=cpp_src, plugin="Rcpp", verbose=TRUE )
testresult <- sumto(x=x, s=100L)
以下是(灾难性的!)结果:
> testresult <- sumto(x=x, s=100L)
100 12 0x50ebf50
> x
[1] 29 79 41 86 91
> testresult
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[63] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> length(testresult)
[1] 88
我怀疑问题的根源在于我是一个 C++ 新手,对于 C 变量类型之外的任何东西都没有一个好的心理模型(即我在功能级别上理解指针、引用和取消引用,但我不知道为什么取消引用 anIntegerVector
似乎在某些地方有效但在其他地方无效,或者std::accumulate
返回什么数据类型等)。
无论如何,如果有人能给我一个关于如何添加int
到的成语Rcpp::IntegerVectors
,将不胜感激。如果您能解释为什么您发布的任何解决方案都有效,则更有帮助。