【发布时间】:2015-06-11 05:24:35
【问题描述】:
是否可以遍历S4 对象槽?
到目前为止,我能够想出这个。但我真的很想避免调用 R 函数slotNames。是否有可能在 C/C++ 级别上做同样的事情?
// [[Rcpp::export]]
void foo(SEXP x) {
Rcpp::S4 obj(x);
Function slotNames("slotNames");
CharacterVector snames = slotNames(obj);
for (int i = 0; i < snames.size(); i++) {
SEXP slot = obj.slot(Rcpp::as<std::string>(snames[i]));
// do something with slot
}
}
【问题讨论】:
-
IMO 我认为您不会因一次调用
slotNames而导致显着的性能成本。 -
同意@nrussell;你能说为什么你想避免
slotNames吗? -
@ben-bolker 我知道一个函数调用不会对性能产生很大影响。我需要这个,因为我正在为 R 编写一个详细的跟踪器,它写下调用的参数。为了避免递归评估,它分支到 C/C++,在其中将参数写入文件。所以我想避免回到 R