我正在Rstudio中编写代码,该代码在Rcpp中使用NumericVector和NumericMatrix。 我对NumericVectors没任何问题,但是当我要构造或调用NumericMatrix时,会收到警告(如下例所示)。 我的代码可以正常工作,但是由于我不了解警告的原因,因此我担心稍后可能会引起一些问题,而我却没有意识到它们。 如果有人帮助我了解这些警告的含义以及我做错的事情,我将不胜感激。
//[[Rcpp::plugins(cpp11)]]
#include <Rcpp.h>
#include <string>
#include <iostream>
using namespace Rcpp;
using namespace std;
// [[Rcpp::export]]
int sim( const NumericVector v1,
const NumericMatrix m1)
{
double a = v1[1]; // no warning
double b = m1(1,1); // no matching for call to object of type 'const NumericVector' (aka 'const Matrix<14>')
NumericMatrix c;
c = NumericMatrix(10,20); //no matching constructor for initialization of 'NumericMatrix' (aka 'const Matrix<14>')
std::cout<<"a= "<<a<<", b= "<<b<<", c(1,1)= "<<c(1,1)<<std::endl;
return 0;
}
要运行此代码,请输入sim.cpp,定义v1和v2,然后调用sim。
library(Rcpp)
v1 <- c(1,2,3)
m1 <- matrix(c(11,22,33,44,55,66),nrow = 2)
sourceCpp("sim.cpp")
sim(v1,m1)
您将看到
[1]a= 2, b= 44, c(1,1)= 0
这是正确的答案,但我仍然有警告。
答案 0 :(得分:1)
我无法复制此内容。我明白了
R> library(Rcpp)
R> sourceCpp("~/tmp/so52632570.cpp")
R> v1 <- c(1,2,3)
R> m1 <- matrix(c(11,22,33,44,55,66),nrow = 2)
R> sim(v1,m1)
a= 2, b= 44, c(1,1)= 0
[1] 0
R>
使用此清理的较小版本的代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int sim( const NumericVector v1, const NumericMatrix m1) {
double a = v1[1];
double b = m1(1,1);
NumericMatrix c = NumericMatrix(10,20);
std::cout<<"a= "<<a<<", b= "<<b<<", c(1,1)= "<<c(1,1)<<std::endl;
return 0;
}
/*** R
v1 <- c(1,2,3)
m1 <- matrix(c(11,22,33,44,55,66),nrow = 2)
sim(v1,m1)
*/
如果您需要有关错误或警告的帮助,则拥有minimally complete verifiable example会有所帮助。
此问题仍未通过测试。