R подсчет ссылок на объекты - PullRequest
       20

R подсчет ссылок на объекты

0 голосов
/ 30 октября 2018

Я отлаживаю большой пакет R. Он создает несколько объектов, но не очищает память. Есть ли способ сделать подсчет ссылок в R, проверяя, к какому объекту обращались, сколько раз. Это даст мне приблизительное представление об объектах, которые создаются, но никогда не используются в последующих частях кода. К вашему сведению, большинство из этих объектов являются data.table

1 Ответ

0 голосов
/ 31 октября 2018

Подсчет ссылок - это механизм определения количества объектов R, указывающих на один и тот же базовый SEXPREC (структура C объектов R). Например, в

a <- 1:5
b <- a

a и b указывают на один и тот же SEXPREC, и, если один из них изменен, необходимо скопировать SEXPREC, чтобы не изменить значение другого объекта. Однако, если счетчик ссылок на объект не увеличивается, это не означает, что он не имеет отношения к вычислениям. Например в

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

a является релевантным, но у a и b будет низкий счетчик ссылок, потому что они указывают на другой 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
...