小编Dir*_*tel的帖子

R:pnorm()和qnorm()的经验版本?

我有一个使用正态分布函数pnorm()和qnorm()的规范化方法.我想改变我的逻辑,以便我可以使用经验分布而不是假设正态.我用ecdf()来计算经验累积分布但后来意识到我开始编写一个基本上是经验的p和q版本的函数.有更简单的方法吗?也许包含pecdf()和qecdf()的包?我讨厌重新发明轮子.

r

3
推荐指数
1
解决办法
1459
查看次数

将RInside的'R'实例作为类/方法之间的参数传递

我一直在使用Rcpp和RInside来集成RC++.我们有一个复杂但设计良好的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实例.

谢谢 - 埃贡

oop r rcpp rinside

3
推荐指数
1
解决办法
408
查看次数

如何从Rcpp定义R函数?

这是一个最小的例子:

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)

毫不奇怪,我得到的是一个字符变量,而不是一个函数.

r rcpp

3
推荐指数
1
解决办法
217
查看次数

用C/C++创建R数据框

我试图做一个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)

c++ r

3
推荐指数
1
解决办法
529
查看次数

在Rcpp中,如何将用户定义的结构从C转换为R

我正在使用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:命名列表中将具有什么样的形式?

谢谢!

rcpp

3
推荐指数
1
解决办法
230
查看次数

Emacs,ESS,R-我是怎么做到的?

http://picasaweb.google.com/lh/photo/F-p2qK3itxJsgj1tLLGsow?feat=directlink

如果您查看图片,则此使用位来自minbuffer底部的R帮助文件.

我怎么做?它不知何故刚刚出现,也许是因为我捣乱了键盘试图运行命令.当我重新启动emacs时它消失了:(

谢谢

emacs r ess

2
推荐指数
1
解决办法
1116
查看次数

在R 2.15.0中安装Rcpp软件包

我在R中安装"Rcpp"软件包时遇到问题.安装命令适用于所有软件包但不适用于此软件包.R错误是:

包'Rcpp'不可用(对于R版本2.15.0)

我正在使用Windows Vista.Please帮助.

install r rcpp

2
推荐指数
1
解决办法
3901
查看次数

在Mac 10.8上Rcpp安装失败

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)

我究竟做错了什么?

r rcpp

2
推荐指数
1
解决办法
1193
查看次数

Rcpp NumericalMatrix数据类型,全局声明

我对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)

c++ boost r rcpp odeint

2
推荐指数
1
解决办法
470
查看次数

填充每组时间序列的有效方法

我正在寻找一种方法来按每组的时间填充时间序列数据集。我使用的非常低效的方法是对split每个组的数据集,并在该列表的所有元素中应用自定义时间序列填充函数(在最大值和最小值之间创建序列,然后合并)。不用说,这个操作不会通过分裂。

我的数据集看起来像,

    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
...
Run Code Online (Sandbox Code Playgroud)

我的尝试是tidyverse通过利用该函数来使用方法complete,即

library(tidyverse)

d1 …
Run Code Online (Sandbox Code Playgroud)

r data.table tidyverse

2
推荐指数
1
解决办法
1127
查看次数

标签 统计

r ×9

rcpp ×6

c++ ×2

boost ×1

data.table ×1

emacs ×1

ess ×1

install ×1

odeint ×1

oop ×1

rinside ×1

tidyverse ×1