无法复制最小工作示例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>