當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。