R3.4查看对象引用计数“ NAMED”

问题描述

直到v3.5(我认为)为止,R都有一个穷人的参考计数工具NAMED。简而言之,对象的NAMED属性可以包含3个值:

  • 0-该对象未命名(即未引用,可以 垃圾收集)
  • 1-该对象由单个名称引用(因此可以就地修改)
  • 2-又称“许多”:该对象由许多名称引用。如果更改-需要复制。如果名称被删除,NAMED 属性不会递减。

(更多详细信息here)。

我正在尝试从R查看此属性,并正在尝试使用pryr::refs(x).Internal(inspect(x))。我不明白任何一个的结果。

tst <- function(x) {
  print(pryr::refs(x))   # 0
  .Internal(inspect(x))  # 2

  x[5] <- as.integer(14)
  print(pryr::refs(x))   # 1
  .Internal(inspect(x))  # 1

  y<-x
  print(pryr::refs(x))   # 2
  .Internal(inspect(x))  # 2
}
a <- 1:100
tst(a)

# [1] 0
# @5646a302a020 13 INTSXP g0c7 [NAM(2)] (len=100,tl=0) 1,2,3,4,5,...
# [1] 1
# @5646ab296810 13 INTSXP g0c7 [NAM(1)] (len=100,14,...
# [1] 2
# @5646ab296810 13 INTSXP g0c7 [NAM(2)] (len=100,...

任何人都可以对这里发生的事情有所了解吗?有没有更好的方法来检查对象的引用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)