gpt4 book ai didi

R 对象引用计数

转载 作者:行者123 更新时间:2023-12-02 04:27:24 25 4
gpt4 key购买 nike

我正在调试一个大型 R 包。它正在创建多个对象但不清理内存。有没有办法在 R 中进行引用计数,检查哪个对象被访问了多少次。这将使我对已创建但从未在代码的后续部分中使用的对象有一个粗略的了解。仅供引用,这些对象中的大多数都是 data.table

最佳答案

引用计数是一种确定有多少 R 对象指向同一底层 SEXPREC(R 对象的 C 结构)的机制。例如在

a <- 1:5
b <- a

ab 指向相同的 SEXPREC,如果其中一个被修改,则需要复制 SEXPREC 以不更改另一个对象的值。但是,如果一个对象的引用计数没有增加,这并不意味着它与计算无关。例如在

a <- 1:5
b <- a+1

a 是相关的,但 ab 的引用计数都较低,因为它们指向不同的 SEXPREC。因此,R 的引用计数不能用于检查对象是否已创建但从未使用过

只是为了好玩,可以使用词法作用域来计算 R 对象被访问的次数:

obj <- function(x){
n <- 0
get <- function() {n <<- n+1; x}
count <- function() n
list(get=get, count=count)
}

然后用

创建一个新的R对象
a <- obj(1:10)

并使用

访问它
a$get()
[1] 1 2 3 4 5 6 7 8 9 10

可以数出对象被访问的次数。

a$count()
[1] 1
max(a$get())
[1] 10
a$count()
[1] 2

如果对象的计数 0,则它是已创建但从未使用过

b <- obj(2)
b$count()
[1] 0

关于R 对象引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53054632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com