gpt4 book ai didi

r - 包/命名空间环境中同名函数的值/引用相等?

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

让我们抓取环境“namespace:stats”和“package:stats”

ns = getNamespace( "stats" )
pkg = as.environment( "package:stats" )

现在让我们在两者中获取函数“sd”:
nsSd = get( "sd" , envir = ns , inherits = FALSE )
pkgSd = get( "sd" , envir = pkg , inherits = FALSE )

他们是一样的吗?他们是!但是“相同”是什么意思?引用还是值相等?
identical( nsSd , pkgSd )

这意味着引用相等,因为以下返回 FALSE:
test1 = function() {}
test2 = function() {}
identical( test1 , test2 )

但如果这是真的,那就意味着环境的框架可以在函数对象旁边包含函数指针。使问题进一步复杂化的是,一个函数可以“存在”在一个环境中,但可以告诉该函数它的执行环境是另一个环境。 Chambers SoDA 似乎没有答案(它是一本密集的书,也许我错过了!)

所以,我想要一个明确的答案。以下哪些是正确的?或者这里有错误的三分法?
  • nsSdpkgSd是两个不同的对象(尽管每个对象的副本
    其他),其中对象在 pkgSdns作为其执行
    环境
  • nsSdpkgSd是指向同一个对象的指针。
  • nsSd是指向 pkgSd 的指针因此,它们被视为相同
  • 最佳答案

    它们是指向同一个对象的指针。使用此 answer to another question ,我们可以检查两个对象是否指向内存中的同一个地方。

    are_same <- function(x, y)
    {
    f <- function(x) capture.output(.Internal(inspect(x)))
    all(f(x) == f(y))
    }

    are_same(nsSd, pkgSd) #TRUE
    are_same(1:5, 1:5) #FALSE

    关于r - 包/命名空间环境中同名函数的值/引用相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278715/

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