无法复制最小工作示例Rcpp 我最近下载并安装了RCPP包,以便用一些C++代码加快我自己包的代码。p>

无法复制最小工作示例Rcpp 我最近下载并安装了RCPP包,以便用一些C++代码加快我自己包的代码。p>,c++,r,rcpp,C++,R,Rcpp,我要做的第一件事是使用Rcpp.package.skeleton(name=“firstpackage”)制作一个包: 这将生成一个包含文件夹man、R和src的文件系统。但是,如果我与《Rcpp》中无缝链接和C++集成的例子比较,这些文件 Makavar < />代码> Mavev.Win < /C> >和代码> RCPPPHelLoWorkWord。为什么这些文件不像示例中那样生成?安装firstpackage后,我无法使用函数rcpp\u hello\u world(),因此我猜这是因为

我要做的第一件事是使用
Rcpp.package.skeleton(name=“firstpackage”)
制作一个包:

这将生成一个包含文件夹
man
R
src
的文件系统。但是,如果我与《Rcpp》中无缝链接和C++集成的例子比较,这些文件<代码> Makavar < />代码> <代码> Mavev.Win < /C> >和<>代码> RCPPPHelLoWorkWord。为什么这些文件不像示例中那样生成?安装
firstpackage
后,我无法使用函数
rcpp\u hello\u world()
,因此我猜这是因为缺少文件

编辑:现在很明显,问题不在于缺少的文件,而在于其他方面。我再试了一次,现在完全按照说明进行:

> Rcpp.package.skeleton("ruben")
Creating directories ...
Creating DESCRIPTION ...
Creating NAMESPACE ...
Creating Read-and-delete-me ...
Saving functions and data ...
Making help files ...
Done.
Further steps are described in './ruben/Read-and-delete-me'.

Adding Rcpp settings
 >> added Imports: Rcpp
 >> added LinkingTo: Rcpp
 >> added useDynLib directive to NAMESPACE
 >> added importFrom(Rcpp, evalCpp) directive to NAMESPACE
 >> added example src file using Rcpp attributes
 >> compiled Rcpp attributes
 >> added Rd file for rcpp_hello_world
然后我看文件。(有点奇怪,但文件结构似乎是一样的)

然后安装新创建的软件包:

> system("R CMD INSTALL ruben")
* installing to library 'C:/Users/n14083/Documents/R/win-library/3.1'
* installing *source* package 'ruben' ...
** libs

*** arch - i386
Warning: running command 'make -f "C:/PROGRA~1/R/R-31~1.1/etc/i386/Makeconf" -f "C:/PROGRA~1/R/R-31~1.1/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="ruben.dll" OBJECTS="RcppExports.o rcpp_hello_world.o"' had status 127
ERROR: compilation failed for package 'ruben'
* removing 'C:/Users/n14083/Documents/R/win-library/3.1/ruben'
Warning message:
running command 'R CMD INSTALL ruben' had status 1 
安装失败:

library(ruben)
Error in library(ruben) : there is no package called ‘ruben’
编辑:解决方案下载Windows工具集()并正确设置路径,在我的示例中:

pathRtools <- paste(c("c:\\Rtools\\bin",
                      "C:\\Rtools\\gcc-4.6.3\\bin",
                      "c:\\PROGRA~2\\MIKTEX~1.9\\miktex\\bin",
                      "C:\\PROGRA~1\\R\\R-3.1.1\\bin\\i386",
                      "c:\\windows",
                      "c:\\windows\\system32"), collapse=";")
Sys.setenv(PATH=pathRtools)
setwd("C:/Users/n14083/Documents")
system("R CMD INSTALL ruben")
pathRtools
  • 这本书写的时候是最新的。正如您现在观察到的,不再包括标题,也不再包括
    Makevars
    ,因为它们不再需要
  • 这是因为我们现在使用Rcpp属性进行构建。这更容易
  • 当然,这一切仍然有效 记录在下面

    R> Rcpp.package.skeleton("ruben")
    Creating directories ...
    Creating DESCRIPTION ...
    Creating NAMESPACE ...
    Creating Read-and-delete-me ...
    Saving functions and data ...
    Making help files ...
    Done.
    Further steps are described in './ruben/Read-and-delete-me'.
    
    Adding Rcpp settings
     >> added Imports: Rcpp
     >> added LinkingTo: Rcpp
     >> added useDynLib directive to NAMESPACE
     >> added importFrom(Rcpp, evalCpp) directive to NAMESPACE
     >> added example src file using Rcpp attributes
     >> compiled Rcpp attributes
     >> added Rd file for rcpp_hello_world
    R> 
    
    让我们看看这些文件:

    R> system("tree ruben")
    ruben
    ├── DESCRIPTION
    ├── man
    │   ├── rcpp_hello_world.Rd
    │   └── ruben-package.Rd
    ├── NAMESPACE
    ├── R
    │   └── RcppExports.R
    ├── Read-and-delete-me
    └── src
        ├── RcppExports.cpp
        └── rcpp_hello_world.cpp
    
    3 directories, 8 files
    R> 
    
    并使用它们:

    R> system("R CMD INSTALL ruben")
    * installing to library ‘/usr/local/lib/R/site-library’
    * installing *source* package ‘ruben’ ...
    ** libs
    g++ -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -Wno-unused -pedantic  -c rcpp_hello_world.cpp -o rcpp_hello_world.o
    g++ -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -Wno-unused -pedantic  -c RcppExports.cpp -o RcppExports.o
    g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o ruben.so RcppExports.o rcpp_hello_world.o -L/usr/lib/R/lib -lR
    installing to /usr/local/lib/R/site-library/ruben/libs
    ** R
    ** preparing package for lazy loading
    ** help
    *** installing help indices
    ** building package indices
    ** testing if installed package can be loaded
    * DONE (ruben)
    R> 
    
    它显然是有效的:

    因此,请证实这一说法

    安装firstpackage后,我无法使用函数rcpp_hello_world(),因此我猜这是因为缺少文件


    运行此框架是每个单元测试运行的一部分,因此自本书编写以来,已经对其进行了数千次测试。

    我添加了一个编辑来说明此问题。这就好像我在执行这段代码时遗漏了一些东西。仍然是您/您的系统。您是否发现行
    错误:包“ruben”的编译失败
    ?你的机器有问题。示例包是固定的,可以在任何地方构建。回到基础,确保你已经安装了一个编译器,这确实是问题所在。我在问题帖中用答案做了编辑。很高兴知道。您可能希望在启动R之前设置
    路径
    ——例如通过yoru系统设置或R下方
    etc/
    目录中的文件。
    R> system("tree ruben")
    ruben
    ├── DESCRIPTION
    ├── man
    │   ├── rcpp_hello_world.Rd
    │   └── ruben-package.Rd
    ├── NAMESPACE
    ├── R
    │   └── RcppExports.R
    ├── Read-and-delete-me
    └── src
        ├── RcppExports.cpp
        └── rcpp_hello_world.cpp
    
    3 directories, 8 files
    R> 
    
    R> system("R CMD INSTALL ruben")
    * installing to library ‘/usr/local/lib/R/site-library’
    * installing *source* package ‘ruben’ ...
    ** libs
    g++ -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -Wno-unused -pedantic  -c rcpp_hello_world.cpp -o rcpp_hello_world.o
    g++ -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -Wno-unused -pedantic  -c RcppExports.cpp -o RcppExports.o
    g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o ruben.so RcppExports.o rcpp_hello_world.o -L/usr/lib/R/lib -lR
    installing to /usr/local/lib/R/site-library/ruben/libs
    ** R
    ** preparing package for lazy loading
    ** help
    *** installing help indices
    ** building package indices
    ** testing if installed package can be loaded
    * DONE (ruben)
    R> 
    
    R> library(ruben)
    R> rcpp_hello_world()
    [[1]]
    [1] "foo" "bar"
    
    [[2]]
    [1] 0 1
    
    R>