【发布时间】:2011-11-09 21:35:11
【问题描述】:
我正在使用 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() 函数来做到这一点;例如,下面这个函数的主线将评估为真,表示一个空值。
SEXP test(SEXP x)
{
isNull(getAttrib(x, mkChar("myname")));
}
浏览 R 扩展编写手册对我没有多大帮助,因为 getAttrib() 的所有示例都涉及预定义的符号,例如 getAttrib(x, R_DimSymbol)。 This section 描述了如何将自定义属性附加到您在 C 中创建的 SEXP 对象,而不是如何获取与传递给 C 函数的对象关联的自定义属性。
【问题讨论】:
标签: r