我有一个Cpp函数,使用Rcpp packgae在R函数内部调用.R函数接受inputDataFrame并使用Cpp函数(也接受DataFrame)来计算药物量(A1)作为时间的函数.然后R返回inputDataFrame计算量的添加列A1.
我想roxygen2在RStudio中使用包来对R函数(而不是Cpp函数)进行documnet.但是,当我使用roxygen2注释(如下所示)时,它没有按照您在构建模型时所期望的方式生成*.RD文件和帮助页面.请注意,当我的包只包含R函数时,我可以毫无困难地使用roxygen2.在后一种情况下,*.RD文件和帮助页面会按预期自动生成.
有关如何做到这一点的任何提示?
在RcppArmadillo中,我需要知道如何转换arma::mat为c样式的数组double *以用于其他功能。
当我运行以下功能时,计算机崩溃:
R部分:
nn3 <- function(x){
results=.Call("KNNCV", PACKAGE = "KODAMA", x)
results
}
Run Code Online (Sandbox Code Playgroud)
C ++部分:
double KNNCV(arma::mat x) {
double *cvpred = x.memptr();
return cvpred[1];
}
Run Code Online (Sandbox Code Playgroud)
最后,我尝试:
nn3(as.matrix(iris[,-5]))
Run Code Online (Sandbox Code Playgroud)
您能帮我发现错误吗?
Error in .Call("MicroCreditLRVBR_TestJacobian", PACKAGE = "MicroCreditLRVBR") :
"MicroCreditLRVBR_TestJacobian" not available for .Call() for package "MicroCreditLRVBR"
Run Code Online (Sandbox Code Playgroud)
包框架是用Rcpp.package.skeleton().我复制了我R和C++代码,修改了Makevars指向包外的一些代码,更新了DESCRIPTION链接到RcppEigen,然后运行compileAttributes().然后我跑去R CMD build创建一个.gz文件并R CMD INSTALL安装它.它已成功构建和链接,但因上述错误而终止.
我可以看到函数MicroCreditLRVBR_TestJacobian确实在RcppExports.cpp和中定义RcppExports.R.我不知道为什么它不可用.Call.
请注意,NAMESPACE包括useDynLib(MicroCreditLRVBR)和exportPattern("^[[:alpha:]]+").
当前状态下包的公共副本位于此github仓库中.任何帮助,将不胜感激.
我整天都在考虑它,但仍然无法弄清楚为什么会这样.我的目标很简单:STEP1,生成函数S(h,p); 步骤2,通过梯形法则对S(h,p)进行数值积分,得到新函数SS(h).我编写了代码并通过sourceCpp来源它,它在R中成功生成了两个函数S(h,p)和SS(h).但是当我尝试通过计算SS(1)来测试它时,R只是保持运行而且从不给出了结果,这很奇怪,因为计算量并不大.知道为什么会这样吗?
我的代码在这里:
#include <Rcpp.h>
using namespace Rcpp;
//generate the first function that gives S(h,p)
// [[Rcpp::export]]
double S(double h, double p){
double out=2*(h+p+h*p);
return out;
}
//generate the second function that gives the numerically integreation of S(h,p) w.r.t p
//[[Rcpp::export]]
double SS(double h){
double out1=0;
double sum=0;
for (int i=0;i<1;i=i+0.01){
sum=sum+S(h,i);
}
out1=0.01/2*(2*sum-S(h,0)-S(h,1));
return out1;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R进行预测,但每次下载预测包时,都会显示rcpp软件包未正确安装的错误.结果我无法运行预测.请问你能告诉我什么是错的或者我需要做什么.
对不起,我是初学者,但我遇到了这个问题.我只是在寻找从C++中调用R中的rnorm函数的最简单方法.我已经查看了rcpp包,但即使在阅读完所有教程之后我仍然非常困惑.我很感激有人带我走过这些步骤,因为他们对编程有经验,但不是rcpp包.
我将我的包提交到CRAN存储库.该包被接受没有错误,但在检查CRAN维护者的第二步报告了以下错误.
不幸的是,我不明白我是如何解决它的.
In file included from /Builds/CRAN-QA-Simon/packages/mavericks-x86_64/Rlib/3.3/RcppArmadillo/include/armadillo:23:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/fstream:864:20: error:
no member named 'Rf_error' in 'std::__1::codecvt_base'; did you mean simply 'Rf_error'?
if (__r == codecvt_base::error)
^~~~~~~~~~~~~~
/Library/Frameworks/R.framework/Resources/include/R_ext/Error.h:35:12: note:
'Rf_error' declared here
void NORET Rf_error(const char *, ...);
^
Run Code Online (Sandbox Code Playgroud)
在我的C++文件中,我写道:
#include <math.h>
#include "ANN/ANN.h"
#include "NN.h"
#include <R.h>
#include "RcppArmadillo.h"
#include <map>
#include <vector>
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
我该怎么纠正这个?是否包含Rpp.h?
我有一个 5x5 矩阵,想找到列“1”和“3”之间最小值的索引。在R我会这样做:
set.seed(1984)
m <- matrix(sample.int(25,25), 5)
min <- which(m[,c(1,3)] == min(m[,c(1,3)]), arr.ind = TRUE)
Run Code Online (Sandbox Code Playgroud)
使用 Rcpp 执行此操作的最有效方法是什么?
我需要对Portmanteau主要测试文章进行深入研究,为此,我必须在不同的场景,样本量和不同的ARMA模型(p,q)下评估它们,从而生成180个场景,这需要我花费6个小时。用R和Rcpp编程我的函数,但是我发现惊奇的是,在C ++中,它速度慢,我的问题是为什么?
我的R代码:
Portmanteau <- function(x,h=1,type = c("Box-Pierce","Ljun-Box","Monti"),fitdf = 0){
Ti <- length(x)
df <- h-fitdf
ri <- acf(x, lag.max = h, plot = FALSE, na.action = na.pass)
pi <- pacf(x, lag.max = h, plot = FALSE, na.action = na.pass)
if(type == "Monti"){d<-0} else{d<-1}
if(type == "Box-Pierce"){wi <- 1} else{wi <- (Ti+2)/seq(Ti-1,Ti-h)}
Q <- Ti*(d*sum(wi*identity(ri$acf[-1]^2))+(1-d)*sum(wi*identity(pi$acf^2)))
pv <- pchisq(Q,df,lower.tail = F)
result <- cbind(Statistic = Q, df,p.value = pv)
rownames(result) <- paste(type,"test")
return(result)
}
Run Code Online (Sandbox Code Playgroud)
我的Rcpp代码
#include <Rcpp.h>
using namespace …Run Code Online (Sandbox Code Playgroud) I have a nested loop as
X <- matrix(c(0.5,0,0,0.75), nrow = 2)
k = nrow(X)
ans1 <- 0
ans2 <- 0
for (aa in 1:k) {
for (bb in 1:k) {
for (cc in 1:k) {
for (dd in 1:k) {
ans1 = ans1 + (0.45 * X[aa,bb] * X[cc,dd])
for (xx in 1:k) {
for (yy in 1:k){
ans2 = ans2 + (1.7*X[aa,bb]*X[xx,yy]*X[cc,dd] + 0.2*X[aa,xx]*X[bb,yy]*X[cc,dd])
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
But the matrix X which must be a …
我一直在使用R进行公司财务和资产定价方面的研究,并且由于我在数学和统计方面的背景,我非常喜欢它.到目前为止,我在R中遇到了两个主要的约束.第一个是处理大数据文件,但我有点通过将R与PostgreSQL和Spark结合起来避开它,我相信我可以从高性能计算机或AWS云获得更多内存在将来.第二个约束是执行速度(对于通过刻度安全报价数据处理滴答很重要),我被推荐Julia比R具有巨大的速度优势.我的问题是,由于Rcpp提供了非常快的执行速度,Julia的速度优势仍然存在保持?我在考虑是否应该学习朱莉娅.
此外,R提供了与WRDS,Quandl,TrueFX和TAQ的完美数据库连接,我真的习惯了Hadley Wickham风格的数据清理.作为一名学者,我有点像R得到了像Journal of Stat Software这样的同行评审期刊的支持.我会试试朱莉娅,看看它是如何运作的.感谢所有的答案和评论!
我想生成一些大的随机多变量(超过6维)正常样本.在R中,许多软件包可以做到这一点,例如rmnorm,rmvn ......但问题是速度!所以我试着通过Rcpp编写一些C代码.我在线浏览了一些教程,但似乎在多变量分布中没有"糖",在STL库中也没有.
任何帮助表示赞赏!
谢谢!