问题描述
直到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 (将#修改为@)