rcpp:如何将伽玛函数应用于标量?
rcpp: how to apply gamma function to a scalar?
我猜函数 gamma only works for a vector as the input. Is there a way to apply it to a scalar, say,
gamma(3)`?
实际上,如果我将 gamma(3)
作为我的代码的一部分,我会得到正确的输出,但是有一条警告消息....
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
List fool(NumericVector vec){
double res = 0;
res = sum(gamma(vec)) + gamma(3);
List result;result["num"] = res;
return result;
}
这是警告消息:
exp.cpp:7:27: warning: 'gamma' is deprecated: first deprecated in OS X 10.9 [-Wdeprecated-declarations]
res = sum(gamma(vec)) + gamma(3);
^
/usr/include/math.h:720:15: note: 'gamma' has been explicitly marked deprecated here
extern double gamma(double) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_9, __IPHONE_NA, __IPHONE_NA);
^
1 warning generated.
感谢您发布代码。你成为了粗心命名空间的牺牲品。 Rcpp 命名空间中有一个(向量化的)gamma()
——第一个参数,并且在 C 数学库中有一个标量 gamma()
(首选:tgamma()
)。而且最好说清楚。
更正以下代码:
#include <Rcpp.h>
// [[Rcpp::export]]
double fool(Rcpp::NumericVector vec){
double res =
Rcpp::sum(Rcpp::gamma(vec)) + // Rcpp sugar sum() and gamma() on vector
::tgamma(3.0); // math library tgamma of double
return res;
}
/*** R
v <- 1:5
fool(v)
sum(gamma(v)) + gamma(3)
*/
输出
R> sourceCpp("/tmp/shuang.cpp")
R> v <- 1:5
R> fool(v)
[1] 36
R> sum(gamma(v)) + gamma(3)
[1] 36
R>
我猜函数 gamma only works for a vector as the input. Is there a way to apply it to a scalar, say,
gamma(3)`?
实际上,如果我将 gamma(3)
作为我的代码的一部分,我会得到正确的输出,但是有一条警告消息....
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
List fool(NumericVector vec){
double res = 0;
res = sum(gamma(vec)) + gamma(3);
List result;result["num"] = res;
return result;
}
这是警告消息:
exp.cpp:7:27: warning: 'gamma' is deprecated: first deprecated in OS X 10.9 [-Wdeprecated-declarations]
res = sum(gamma(vec)) + gamma(3);
^ /usr/include/math.h:720:15: note: 'gamma' has been explicitly marked deprecated here extern double gamma(double) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_9, __IPHONE_NA, __IPHONE_NA); ^ 1 warning generated.
感谢您发布代码。你成为了粗心命名空间的牺牲品。 Rcpp 命名空间中有一个(向量化的)gamma()
——第一个参数,并且在 C 数学库中有一个标量 gamma()
(首选:tgamma()
)。而且最好说清楚。
更正以下代码:
#include <Rcpp.h>
// [[Rcpp::export]]
double fool(Rcpp::NumericVector vec){
double res =
Rcpp::sum(Rcpp::gamma(vec)) + // Rcpp sugar sum() and gamma() on vector
::tgamma(3.0); // math library tgamma of double
return res;
}
/*** R
v <- 1:5
fool(v)
sum(gamma(v)) + gamma(3)
*/
输出
R> sourceCpp("/tmp/shuang.cpp")
R> v <- 1:5
R> fool(v)
[1] 36
R> sum(gamma(v)) + gamma(3)
[1] 36
R>