0

假设我有以下功能:

List foo(List x) 
{
   x.attr("class") = "myOwnClass";
   return(x);
}

我想覆盖foo函数输出的 R汇总方法。但是,以下 R 风格的方法不起作用:

List summary.myOwnClass(List x) 
{
   return(x)
}

在编译过程中,我有一个错误,上面写着“'.'之前的预期初始化程序。' 令牌”。

请帮助我了解如何在Rcpp框架中为我的自定义类实现摘要函数覆盖

将非常感谢您的帮助!

4

1 回答 1

4

我觉得这很可能是重复的,但我最初的搜索没有找到。我现在添加一个快速答案,但如果我以后找到一个,我会删除这个答案并提出一个副本。

解决这个问题的方法是使用export标签来指定函数的 R 端名称,summary.myOwnClass同时使用其他东西作为 C++ 端名称;您不能在 C++ 函数名称的中间使用点(考虑一下,例如,如何调用成员函数——这将是行不通的)。因此,我们执行以下操作

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
List foo(List x)
{
    x.attr("class") = "myOwnClass";
    return(x);
}

// [[Rcpp::export(summary.myOwnClass)]]
List summary(List x)
{
    return(x);
}

/*** R
l <- foo(1:3)
summary(l)
*/

然后我们得到我们期望的输出

> l <- foo(1:3)

> summary(l)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

attr(,"class")
[1] "myOwnClass"
于 2019-07-24T11:30:15.557 回答