我有一个使用正态分布函数pnorm()和qnorm()的规范化方法.我想改变我的逻辑,以便我可以使用经验分布而不是假设正态.我用ecdf()来计算经验累积分布但后来意识到我开始编写一个基本上是经验的p和q版本的函数.有更简单的方法吗?也许包含pecdf()和qecdf()的包?我讨厌重新发明轮子.
我一直在使用Rcpp和RInside来集成R和C++.我们有一个复杂但设计良好的C++架构,我发现很难从一个函数中访问R.是否可以将R 实例传递给不同的类/函数,以获得更多的OOP设计?如果是,有什么例子吗?
为了详细说明查询,我想说这样的话,
void foo(RInside& R0, int& x0)
{
R0.assign(x0,"totalSum");
}
void foo2(RInside& R0, int& y0)
{
R0.assign(y0,"temp");
R0.parseEvalQ("totalSum = totalSum + temp");
}
int main(int argc, char *argv[])
{
RInside R(int argc, char *argv[]);
int x=10, y = 11;
foo(R,x);
foo2(R,y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我目前注意到的是每次调用foo,都可能会创建一个新的RInside实例.
谢谢 - 埃贡
这是一个最小的例子:
require(Rcpp)
require(inline)
src <- '
Rcpp::Environment glob = Rcpp::Environment::global_env();
glob.assign( "foo" , "function(x) x + 1" );
'
myFun <- cxxfunction(body=src,plugin = "Rcpp")
myFun()
foo
[1] "function(x) x + 1"
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,我得到的是一个字符变量,而不是一个函数.
我试图做一个data.frame通到从C/C++编码R代码(我不使用RCPP,我想在这里使用R C-API从第一原则,不相关的理由)
我知道如何制作双向量并加载数据(这里只是虚拟数据)
SEXP col1;
Rf_protect(col1= Rf_allocVector(REALSXP, 10);
for (size_t j = 0; j < 10; j++)
{
double dval = static_cast<double(j*3.14);
REAL(col1)[static_cast<int>(j)] = dval;
}
SEXP nameSym = Rf_install(const_cast<char*>("myColumn1"));
Rf_defineVar(nameSym, col1, _R_GlobalEnv);
Run Code Online (Sandbox Code Playgroud)
这样可以在RI里面做到
Y <- mean(myColumn1)
Run Code Online (Sandbox Code Playgroud)
但我真正想做的是拥有一个超过1列的数据帧
SEXP col1;
SEXP col2;
Rf_protect(col1= Rf_allocVector(REALSXP, 10);
Rf_protect(col2 = Rf_allocVector(REALSXP, 10);
for (size_t j = 0; j < 10; j++)
{
double dval1 = static_cast<double(j*3.14);
double dval2 = static_cast<double(j*42.0);
REAL(col1)[static_cast<int>(j)] = dval1;
REAL(col2)[static_cast<int>(j)] = dval2;
}
SEXP nameSym1 = Rf_install(const_cast<char*>("myColumn1"));
SEXP nameSym2 …Run Code Online (Sandbox Code Playgroud) 我正在使用Rcpp软件包,并且可以让我的C函数在R中编译和运行,但是现在我想将一个大型的,用户定义的数据结构返回给R。该结构中的字段是数字或字符串-没有新的或奇数类型在结构内。下面的示例已简化并且未编译,但传达了我的问题的想法。
typedef struct {
char* firstname[128];
char* lastname[128];
int nbrOfSamples;
} HEADER_INFO;
// [[Rcpp::export]]
HEADER_INFO* read_header(Rcpp::StringVector strings) {
FILE *fp;
MEF_HEADER_INFO *header;
char * filename = (char*)(strings(0));
char * password = (char*)(strings(1));
header = (HEADER_INFO*)malloc(sizeof(HEADER_INFO));
memset(header, 0, sizeof(HEADER_INFO));
fp = fopen(filename, "r");
(void)read_header(header, password);
return header;
}
Run Code Online (Sandbox Code Playgroud)
我很确定可以将标头中的条目打包回到StringVector中,但这似乎是一种蛮力的方法。我的问题是是否存在更优雅的解决方案。我不清楚这种结构在R:命名列表中将具有什么样的形式?
谢谢!
http://picasaweb.google.com/lh/photo/F-p2qK3itxJsgj1tLLGsow?feat=directlink
如果您查看图片,则此使用位来自minbuffer底部的R帮助文件.
我怎么做?它不知何故刚刚出现,也许是因为我捣乱了键盘试图运行命令.当我重新启动emacs时它消失了:(
谢谢
我在R中安装"Rcpp"软件包时遇到问题.安装命令适用于所有软件包但不适用于此软件包.R错误是:
包'Rcpp'不可用(对于R版本2.15.0)
我正在使用Windows Vista.Please帮助.
Rcpp无法为我安装.当我在R控制台中运行以下内容时(Mac 10.8上的R 2.15.1):
install.packages("Rcpp")
我收到以下错误:
/usr/bin/clang++ -I/usr/local/Cellar/r/2.15.1/R.framework/Resources/include \
-DNDEBUG -I../inst/include/ -I/usr/local/Cellar/readline/6.2.4/include \
-isystem /usr/local/include -I/opt/X11/include -fPIC -Os -w -pipe - \
march=native -Qunused-arguments -mmacosx-version-min=10.8 \
-c exceptions.cpp -o exceptions.o
exceptions.cpp:82:14: fatal error: 'bits/exception_defines.h' file not found
#include <bits/exception_defines.h>
^
1 error generated.
make: *** [exceptions.o] Error 1
ERROR: compilation failed for package ‘Rcpp’
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我对C++很新,我试图通过Rcpp来加速我的R代码.
下面的代码从t0到t1集成 - 这是在"lorenz"函数中完成的.Test4使用"lorenz""计数"次数进行整合.但是,在时间"t1",系统的状态在系统重新运行之前在"write_lorenz"中被修改,这就是问题所在.如果我通过从R调用test4反复运行相同的程序,打印到屏幕总是产生相同的结果,但是,我返回的矩阵"u"没有,并且似乎最终收敛到任何"t1"是什么问题.
我的输入值没有改变所以我想知道是否有内存泄漏,或者是否有其他事情发生,如何解决它.另外我想知道我的"u"初始化是否不正确我应该使用"new"命令.
我试过的是NumericMatrix*u = NULL;*u =新的NumericMatrix; 然后我尝试访问矩阵的元素为*u(1,2),但是以这种方式访问元素会导致错误,说你不是函数.
任何帮助将不胜感激
我从以下网站修改了此代码
http://headmyshoulder.github.io/odeint-v2/examples.html
所以我可以和Rcpp一起使用它
//###################################R Code ###############################
library(Rcpp)
sourceCpp("test4.cpp")
sigma <- 10.0
R <-28.0
b <- 8.0 / 3.0
a2 <- c(10.0 , 1.0 , 1.0) #initial conditions X0,I0,Y0
L2 <- c(0.0 , 2.0 , 0.1) #initial time, kick time, error
counts <- 2
kick <-1.0; # kick size
pars <-c(sigma,R,b,kick)
test4(a=a,L2=L2,counts=counts,pars= pars)
// C ++ code
//[[Rcpp::depends(BH)]]
//[[Rcpp::depends(RcppEigen)]]
//[[Rcpp::plugins("cpp11")]]
#include <Rcpp.h>
#include <RcppEigen.h>
#include <math.h>
#include <boost/array.hpp>
#include <boost/numeric/odeint.hpp> …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来按每组的时间填充时间序列数据集。我使用的非常低效的方法是对split每个组的数据集,并在该列表的所有元素中应用自定义时间序列填充函数(在最大值和最小值之间创建序列,然后合并)。不用说,这个操作不会通过分裂。
我的数据集看起来像,
Run Code Online (Sandbox Code Playgroud)source grp cnt 1: 83 2017-06-06 13:00:00 1 2: 83 2017-06-06 23:00:00 1 3: 83 2017-06-07 03:00:00 1 4: 83 2017-06-07 07:00:00 2 5: 83 2017-06-07 13:00:00 1 6: 83 2017-06-07 19:00:00 1 7: 83 2017-06-08 00:00:00 1 8: 83 2017-06-08 14:00:00 1 9: 83 2017-06-08 15:00:00 1 10: 83 2017-06-08 20:00:00 1 11: 137 2017-06-04 02:00:00 1 12: 137 2017-06-04 05:00:00 1 13: 137 2017-06-04 23:00:00 1 ...
我的尝试是tidyverse通过利用该函数来使用方法complete,即
library(tidyverse)
d1 …Run Code Online (Sandbox Code Playgroud)