在另一个 c++ 函数中使用 c++ 函数(在带有 Rcpp 的 R 包中)
Using a c++ function in an other c++ function (inside a R Package with Rcpp)
我尝试创建一个 R 包(使用 Rcpp)。
一切正常。但是现在我写了一个 c++ 函数,我想在另一个 c++ 文件中调用它。
所以在 /src 中有:
- 函数 1 = linearInterpolation.cpp
- 函数 2 = getSlope.cpp
让我们以function1为例,它只是在特定位置的两点之间进行线性插值。
#include <Rcpp.h>
using namespace Rcpp;
//' @name linearInterpolation
//' @title linearInterpolation
//' @description Twodimensional linearinterpolation for a specific point
//' @param xCoordinates Two x coordinates
//' @param yCoordinates Coresponding two y coordinates
//' @param atPosition The Point to which the interpolation shall be done
//' @return Returns the linear interpolated y-value for the specific point
//' @examples
//' linearInterpolation(c(1,2),c(1,4),3)
//'
//' @export
// [[Rcpp::export]]
double linearInterpolation(NumericVector xCoordinates, NumericVector yCoordinates, double atPosition) {
// start + delta y / delta x_1 * delta x_2
return yCoordinates[1] + getSlope(xCoordinates, yCoordinates) * (atPosition - xCoordinates[1]);
}
并且斜率是在不同的函数(文件)中计算的。
#include <Rcpp.h>
using namespace Rcpp;
//' @name getSlope
//' @title getSlope
//' @description Calculates the slopes between two points in 2Dimensions
//' @param xCoordinates Two x coordinates
//' @param yCoordinates Coresponding two y coordinates
//' @return Returns the slope
//' @examples
//' getSlope(c(1,2),c(1,4),3)
//'
//' @export
// [[Rcpp::export]]
double getSlope(NumericVector xCoordinates, NumericVector yCoordinates) {
return (yCoordinates[1] - yCoordinates[0]) / (xCoordinates[1] - xCoordinates[0]);
}
我对 Rcpp 或 c++ 没有更深入的了解。我阅读了 Vignette 和 Writing a package that uses Rcpp 我想我也阅读了正确的部分,但我没有理解。
为什么 getSlope 函数不在另一个函数中 "visible" - 因为它们都在同一个包中。
如何在其他文件中使用 getSlope?
抱歉,我真的卡住了。
谢谢和最诚挚的问候
妮可
也许你应该制作另一个文件,一个头文件.hpp
,然后把它放进去:
#include <Rcpp.h>
using namespace Rcpp;
double getSlope(NumericVector xCoordinates, NumericVector yCoordinates);
或者,更好的是,
#include <Rcpp.h>
double getSlope(Rcpp:: NumericVector xCoordinates, Rcpp:: NumericVector yCoordinates);
并将 #include"myheader.hpp"
放在两个 cpp 文件的顶部。这是为了声明此函数,以便两个 cpp 文件都可以看到它。
... as they are both in the same package
仅仅因为两个东西在同一个 R 包中,并不意味着它们在同一个 C++ 翻译单元(即cpp 文件),而 翻译单元 是两个 C++ 函数相互查看的重要内容。它们必须在同一个cpp文件中,或者你必须使用一个头文件。
我尝试创建一个 R 包(使用 Rcpp)。 一切正常。但是现在我写了一个 c++ 函数,我想在另一个 c++ 文件中调用它。 所以在 /src 中有:
- 函数 1 = linearInterpolation.cpp
- 函数 2 = getSlope.cpp
让我们以function1为例,它只是在特定位置的两点之间进行线性插值。
#include <Rcpp.h>
using namespace Rcpp;
//' @name linearInterpolation
//' @title linearInterpolation
//' @description Twodimensional linearinterpolation for a specific point
//' @param xCoordinates Two x coordinates
//' @param yCoordinates Coresponding two y coordinates
//' @param atPosition The Point to which the interpolation shall be done
//' @return Returns the linear interpolated y-value for the specific point
//' @examples
//' linearInterpolation(c(1,2),c(1,4),3)
//'
//' @export
// [[Rcpp::export]]
double linearInterpolation(NumericVector xCoordinates, NumericVector yCoordinates, double atPosition) {
// start + delta y / delta x_1 * delta x_2
return yCoordinates[1] + getSlope(xCoordinates, yCoordinates) * (atPosition - xCoordinates[1]);
}
并且斜率是在不同的函数(文件)中计算的。
#include <Rcpp.h>
using namespace Rcpp;
//' @name getSlope
//' @title getSlope
//' @description Calculates the slopes between two points in 2Dimensions
//' @param xCoordinates Two x coordinates
//' @param yCoordinates Coresponding two y coordinates
//' @return Returns the slope
//' @examples
//' getSlope(c(1,2),c(1,4),3)
//'
//' @export
// [[Rcpp::export]]
double getSlope(NumericVector xCoordinates, NumericVector yCoordinates) {
return (yCoordinates[1] - yCoordinates[0]) / (xCoordinates[1] - xCoordinates[0]);
}
我对 Rcpp 或 c++ 没有更深入的了解。我阅读了 Vignette 和 Writing a package that uses Rcpp 我想我也阅读了正确的部分,但我没有理解。
为什么 getSlope 函数不在另一个函数中 "visible" - 因为它们都在同一个包中。 如何在其他文件中使用 getSlope?
抱歉,我真的卡住了。
谢谢和最诚挚的问候
妮可
也许你应该制作另一个文件,一个头文件.hpp
,然后把它放进去:
#include <Rcpp.h>
using namespace Rcpp;
double getSlope(NumericVector xCoordinates, NumericVector yCoordinates);
或者,更好的是,
#include <Rcpp.h>
double getSlope(Rcpp:: NumericVector xCoordinates, Rcpp:: NumericVector yCoordinates);
并将 #include"myheader.hpp"
放在两个 cpp 文件的顶部。这是为了声明此函数,以便两个 cpp 文件都可以看到它。
... as they are both in the same package
仅仅因为两个东西在同一个 R 包中,并不意味着它们在同一个 C++ 翻译单元(即cpp 文件),而 翻译单元 是两个 C++ 函数相互查看的重要内容。它们必须在同一个cpp文件中,或者你必须使用一个头文件。