r - 如何在 C 中获取 R 的变量名(在 C 中替换)?
问题描述
如何从 C 中获取用作函数参数的对象名称?我有 C 中的示例代码,可以让我访问被调用的函数的名称:
#include <Rinternals.h>
SEXP xname(SEXP x)
{
const char *fun_name = CHAR(PRINTNAME(CAR(x)));
x = CDR(x);
const char *arg_name = isNull(TAG(x)) ? "" : CHAR(PRINTNAME(TAG(x)));
Rprintf("fn_name: %s, arg_name: %s\n", fun_name, arg_name);
return R_NilValue;
}
从R:
> xname <- function(...) invisible(.External("xname", ...))
> x1 = 123
> xname(x1)
fn_name: xname, var_name:
但是,我正在尝试找到一种访问对象名称的方法。在文档中,我找到了一个仅用于命名 args 的解决方案:
> xname(arg = x1)
fn_name: xname, var_name: arg
我想找到 C 等效项substitute()
:
> substitute(x1)
x1
我试过substitute()
了Rinternals.h
,但它总是返回一个包含上述内容的列表。有谁知道该怎么做?也许findVarInFrame()
?
此致
解决方案
推荐阅读
- angular - 如何选择材质颜色的变化来设置 Angular 组件的样式
- python - 有一种方法可以在一定时间内禁用方法吗?
- python-3.x - 实例属性 ship_speed_factor 在 __init__ 之外定义。为什么?
- mongodb - 如何将 $in 和 $elemMatch 与 MongoDB (PyMongo) 正确结合
- java - 无法覆盖超类中的受保护方法
- typescript - 使用 ts-protoc-gen 从 .protobuf 文件生成类型定义,结果仅包含原始接口定义,除了 jspb.Message 原型
- java - 在新的 1.14.4 forge of minecraft 中无法让定制剪刀在块上工作
- node.js - 无法使用 protobuf.js 加载 protobuf 消息
- javafx - 在第一个控制器的第一个函数中,我从第二个控制器调用第二个函数,我得到了很多错误
- flutter - Flutter - 如何在 ListView 构建器中列出 forEach() 值?