我想在Rcpp中获得一个选项(例如"width"
)的值。我试过了:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int test_option() {
Environment base("package:base");
Function get_option = base["getOption"];
return get_option("width");
}
// [[Rcpp::export]]
int test_option2() {
Environment base("package:base");
Function get_option = base["options"];
List l_width = get_option("width");
return l_width[1];
}
第一个函数没有编译,第二个函数使会话崩溃。
你知道怎么做吗?
发布于 2018-07-09 05:51:35
test_option
如果你这样写你的第一个函数,它将会工作:
SEXP test_option() {
或者这样:
IntgerVector test_option() {
test_option2
关于问题中的第二个函数,您在注释中写道,您的目标是将SEXP转换为int
,因此在这种情况下,如果s
是包含整数的SEXP
,那么as<int>(s)
或INTEGER(s)[0]
就是int
。这与IntegerVector
相反。如果你真的想写一个IntegerVector
,那么就用IntegerVector
替换下面出现的三个int
。
将下面的代码放在当前目录的myOption.cpp中,并按照第一行中的说明进行操作。
// To run: library(Rcpp); sourceCpp("myOption.cpp")
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int myOption(CharacterVector x) {
Environment base( "package:base" ) ;
Function getOption = base["getOption"];
SEXP s = getOption(x);
int i = as<int>(s);
return i;
}
/*** R
myOption("width")
*/
https://stackoverflow.com/questions/51236092
复制相似问题