使用.Call时,在R SEXP对象上获取自定义属性

时间:2011-11-09 21:35:11

标签: r

我正在使用R的.Call接口从R调用C函数。我传递的一些对象附加了自定义属性,我想从C访问这些属性,而不必将它们作为单独的参数传递给.Call函数。

例如,考虑具有自定义字符串属性的实数的简单情况:

x <- 1
attr(x, "myname") <- "Abiel"

从C函数中获取“myname”属性的一种方法是将其作为单独的参数传递:

.Call("test", x, as.character(attr(x, "myname")))

但是,我宁愿做到

.Call("test", x)

然后恢复C函数中的“myname”属性。我一直无法弄清楚如何使用getAttrib()函数执行此操作;例如,下面这个函数的主线将评估为true,表示空值。

SEXP test(SEXP x)
{
    isNull(getAttrib(x, mkChar("myname")));
}

扫描R扩展编写手册对我没什么帮助,因为getAttrib()的所有示例都涉及预定义符号,例如getAttrib(x, R_DimSymbol)This section描述了如何将自定义属性附加到您在C中创建的SEXP对象,而不是如何获取与传递给C函数的对象关联的自定义属性。

1 个答案:

答案 0 :(得分:2)

您需要install该符号查找表的属性。在5.9.4 (Attributes)Writing R Extensions部分中没有使用getAttrib的示例,但xts.h中有几个示例。

以下代码应评估为FALSE

SEXP test(SEXP x)
{
    isNull(getAttrib(x, install("myname")));
}