使用.cpp文件让 RcppArmadillo 在 Rstudio 中工作
Getting RcppArmadillo working in Rstudio using .cpp file
我是新手,很抱歉提出基本问题。 我已经设法让 Rcpp 工作,但需要在犰狳中发挥作用,但我只是没有做对。 我知道代码很糟糕,就像我说我是C++的新手一样,但如果有人能帮助我完成这个例子,我将不胜感激。 我在 Rstudio 中的 .cpp 文件中的代码如下所示。 我正在运行最新的R和Rstudio。 谢谢。
#include <iostream>
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
/*** R
require(Rcpp)
require(RcppArmadillo)
#Population of size N
N = 350
#Set size
m = 3
#Number of cycles
C = 20
#Final number of analysed units
n = C * m
#make the r vector of ranks
r <- rep(1:m, length.out = n)
#initialise alpha matrix nxn
alpha <- matrix(0, ncol = N, nrow = n)
*/
// [[Rcpp::export]]
unsigned nChoosek( unsigned n, unsigned k )
{
if (k > n) return 0;
if (k * 2 > n) k = n-k;
if (k == 0) return 1;
int result = n;
for( int i = 2; i <= k; ++i ) {
result *= (n-i+1);
result /= i;
}
return result;
}
// [[Rcpp::export]]
NumericMatrix alphaC(NumericVector r, int N, int m, int n, int C,
NumericMatrix alpha){
int S = r.size();
int a = 0;
int b = 0;
double c = 0;
for(int i = 0; i < N; ++i){
for (int j = 0; j < S; ++j){
a = nChoosek(i, (r[j] - 1));
b = nChoosek((N - (i + 1)),( m - r[j]));
c = nChoosek(N, m);
alpha(j,i) = a*b/c;
//std::cout << "a*b/c: " << a*b/c << std::endl;
}
}
return(alpha);
}
/*** R
#Create first order probabilities
pi <- 1 - apply((1 - alphaC(r,N,m,n,C,alpha)), 2, prod)
plot(pi)
*/
/*** R
#Second order inclusion properties.
pii <- matrix(0, ncol = N, nrow = N)
*/
// [[Rcpp::export]]
int times(NumericVector vec){
int sum = 1;
sum = arma::prod(vec);
return sum;
}
/*** R
vec = 1:5
times(vec)
*/
您的示例代码包含许多与此处无关的内容。下次请尝试提供一个最小的示例,以及您收到的错误消息。无论如何,您将需要一个犰狳数据结构才能使用arma::prod
。您可以按照注释中的@mt1022所示直接创建它,也可以通过使用合适的参数定义函数来隐式创建它:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
double times(arma::vec vec){
double result = arma::prod(vec);
return result;
}
/*** R
vec <- 1:5 + 0.5
times(vec)
*/
请注意,我已将返回类型更改为双精度,因为numeric
向量的乘积通常不能表示为int
。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 使用.cpp文件让 RcppArmadillo 在 Rstudio 中工作