R散列或变量的唯一id

R散列或变量的唯一id,r,hash,memory-address,internals,objectid,R,Hash,Memory Address,Internals,Objectid,是否有一种替代方法来检查函数,以检索R中与MIT许可证兼容的变量的地址或散列 今天我使用: id = function(x) { txt <- capture.output(.Internal(inspect(x, 1)))[[1]] return(regmatches(txt,regexpr("@[^ ]+",txt))) } id=函数(x){ txt最后,我使用了一个低级C实现: #include <R.h> #include <Rin

是否有一种替代方法来检查函数,以检索R中与MIT许可证兼容的变量的地址或散列

今天我使用:

id = function(x) {
  txt <- capture.output(.Internal(inspect(x, 1)))[[1]]
  return(regmatches(txt,regexpr("@[^ ]+",txt)))
}
id=函数(x){

txt最后,我使用了一个低级C实现:

#include <R.h>
#include <Rinternals.h>
#include <Rdefines.h>

SEXP id(SEXP x)
{
    char buffer[32];
    snprintf(buffer, 32, "%p", (void *)x);
    return(ScalarString(mkChar(buffer)));
}
#包括
#包括
#包括
SEXP id(sexpx)
{
字符缓冲区[32];
snprintf(缓冲区,32,“%p”,(void*)x);
返回(ScalarString(mkChar(buffer));
}

最后,我使用了一个低级C实现:

#include <R.h>
#include <Rinternals.h>
#include <Rdefines.h>

SEXP id(SEXP x)
{
    char buffer[32];
    snprintf(buffer, 32, "%p", (void *)x);
    return(ScalarString(mkChar(buffer)));
}
#包括
#包括
#包括
SEXP id(sexpx)
{
字符缓冲区[32];
snprintf(缓冲区,32,“%p”,(void*)x);
返回(ScalarString(mkChar(buffer));
}

pryr::inspect(mtcars)$address
我看到的pryr是GPL-2,所以我不能使用它,因为我的库是MIT@hrbrmstr
pryr::address(mtcars)
是否相同且更好?@MarekJagielski如何定义“唯一”?
y=1;x=y;address(x)==address(y)
returns
TRUE
@Spacedman我选择了一个与OP产生相同价值的。OP:对MIT的事情表示歉意,但是调用相同的低级R东西
pryr
将为您提供所需的功能,而不需要CRAN警告并保持其MIT。您还可以向CRAN mods解释您正在做什么以及为什么要这样做。它们是很棒的CHAP,可能会根据使用情况允许使用您的原始代码。
pryr::inspect(mtcars)$address
pryr,我看到的是GPL-2,所以我不能使用它我的库MIT@hrbrmstr
pryr::address(mtcars)
是否相同且更好?@MarekJagielski如何定义“唯一”?
y=1;x=y;address(x)==address(y)
returns
TRUE
@Spacedman我选择了一个与OP产生相同价值的。OP:对MIT的事情表示歉意,但是调用相同的低级R东西
pryr
将为您提供所需的功能,而不需要CRAN警告并保持其MIT。您还可以向CRAN mods解释您正在做什么以及为什么要这样做。它们是很好的CHAP,可能会根据用例允许使用您的原始代码。