当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R tracemem 对象的跟踪复制


R语言 tracemem 位于 base 包(package)。

说明

此函数标记一个对象,以便每当内部代码复制该对象时都会打印一条消息。这是 R 中 hard-to-predict 内存使用的主要原因。

用法

tracemem(x)
untracemem(x)
retracemem(x, previous = NULL)

参数

x

一个 R 对象,而不是函数或环境或 NULL

previous

tracememretracemem 返回的值。

细节

此函数是可选的,在编译时确定,因为即使没有跟踪任何对象,它也会使 R 运行得更慢。当 R 未使用内存分析进行编译时,tracememuntracemem 会出现错误; retracemem 没有(因此可以在开发过程中将其保留在代码中)。

它在 CRAN macOS 和 Windows 版本中启用R.

当跟踪对象时,C 函数 duplicate 对该对象的任何复制都会向标准输出生成一条消息,就像将参数传递给 .C.Fortran 时进行类型强制和复制一样。

该消息由字符串 tracemem 、正在复制的对象和正在创建的新对象的标识字符串以及显示重复发生位置的堆栈跟踪组成。 retracemem() 用于指示变量应被视为前一个变量的副本(例如,在下标之后)。

可以使用 tracingState 关闭消息。

无法跟踪函数,因为这会与 trace 冲突,并且跟踪 NULL 、环境、承诺、弱引用或外部指针对象没有用,因为这些不重复。

这些函数是primitive

用于标识跟踪输出中的对象的字符串(用尖括号括起来的十六进制地址),或NULL(不可见)。

例子

## Not run: 
a <- 1:10
tracemem(a)
## b and a share memory
b <- a
b[1] <- 1
untracemem(a)

## copying in lm: less than R <= 2.15.0
d <- stats::rnorm(10)
tracemem(d)
lm(d ~ a+log(b))

## f is not a copy and is not traced
f <- d[-1]
f+1
## indicate that f should be traced as a copy of d
retracemem(f, retracemem(d))
f+1

## End(Not run)

也可以看看

capabilities("profmem")查看此版本是否启用了此函数R.

trace , Rprofmem

https://developer.r-project.org/memory-profiling.html

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Trace Copying of Objects。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。