自定义 class 的 Rcpp 覆盖摘要方法
Rcpp override summary method for custom class
假设我有以下功能:
List foo(List x)
{
x.attr("class") = "myOwnClass";
return(x);
}
我想覆盖 foo 函数输出的 R summary 方法。然而,以下 R 风格的方法不起作用:
List summary.myOwnClass(List x)
{
return(x)
}
在编译过程中我有一个错误提示 "expected initializer before '.' token".
请帮助我了解如何在 Rcpp 框架内实现 summary 函数 override我的自定义class.
非常感谢您的帮助!
我觉得这可能是重复的,但我最初的搜索并没有找到一个。我现在添加一个快速答案,但如果我以后找到一个,我会删除这个答案并提出一个副本。
解决此问题的方法是使用 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"
假设我有以下功能:
List foo(List x)
{
x.attr("class") = "myOwnClass";
return(x);
}
我想覆盖 foo 函数输出的 R summary 方法。然而,以下 R 风格的方法不起作用:
List summary.myOwnClass(List x)
{
return(x)
}
在编译过程中我有一个错误提示 "expected initializer before '.' token".
请帮助我了解如何在 Rcpp 框架内实现 summary 函数 override我的自定义class.
非常感谢您的帮助!
我觉得这可能是重复的,但我最初的搜索并没有找到一个。我现在添加一个快速答案,但如果我以后找到一个,我会删除这个答案并提出一个副本。
解决此问题的方法是使用 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"