r - 如何将 Rcpp 列表返回给 C 函数
问题描述
问题
在 R 包中,我如何返回Rcpp::List
一个C
函数?
例子
我在我的github 页面上托管了一个包来说明要求。
它包含一个R
函数,它调用一个C
函数,我想调用该C++
函数来检索列表。
R
#' @useDynLib crcpp c_ask_for_list
r_ask_for_list <- function() {
.Call(c_ask_for_list)
}
C
#include <Rinternals.h>
SEXP c_ask_for_list (){
SEXP l = PROTECT(allocVector(VECSXP, 1));
//l = rcpp_create_list(); // Call the C++ function to create the list
UNPROTECT(1);
return(l);
}
C++
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
extern "C" SEXP rcpp_create_list() {
Rcpp::List l(1);
l[0] = "foo";
return l;
}
如果我取消注释函数中的l = rcpp_create_list()
行,C
程序就会崩溃。
解决方案
感谢所有的指针,我让程序按预期工作。现在的完整结构是
R
#' @useDynLib crcpp c_ask_for_list
#' @export
r_ask_for_list <- function() {
.Call("c_ask_for_list", packages = "crcpp")
}
C
文件:c_ask_for_list.h
#ifndef CRCPP_H
#define CRCPP_H
#include <Rinternals.h>
#ifdef __cplusplus
extern "C" {
#endif
SEXP rcpp_create_list();
#ifdef __cplusplus
}
#endif
#endif /* CRCPP_H */
文件:c_ask_for_list.c
#include "c_ask_for_list.h"
SEXP c_ask_for_list () {
SEXP l = _crcpp_rcpp_create_list(); // Call the C++ function to create the list
return(l);
}
C++
文件:rcpp_create_list.cpp
#include <Rcpp.h>
using namespace Rcpp;
//' @importFrom Rcpp evalCpp
//' @export
// [[Rcpp::export]]
SEXP rcpp_create_list() {
Rcpp::List l(2);
l[0] = "foo";
l[1] = "bar";
return l;
}
推荐阅读
- dataframe - 是否可以根据此代码创建热图
- javascript - Javascript:检查字符串是否仅包含字母、数字、空格和特定符号
- python - 试图数数的错误。在网格上从 A 点到 B 点所需的移动次数。不适用于所有值
- sql - Azure Sql 数据同步组陷入“未就绪”状态
- algorithm - 在 3D 密闭空间中找到至少相隔 d 的随机 k 点
- css - 为什么模态框标题周围有边框?
- javascript - 在 FireFox Mobile 上获取设备的磁北方向
- python - to_datetime vs to_pydatetime 试图将 str 转换为 datetime
- python - How to plot image-image similarity matrix map?
- c++ - 如何通过 return 语句更改指针指向的位置?