gpt4 book ai didi

r - 向不同于 .GlobalEnv 的环境采购方法

转载 作者:行者123 更新时间:2023-12-04 06:08:10 26 4
gpt4 key购买 nike

是否可以将方法来源到除 .GlobalEnv 之外的环境中? ?

我慢慢对 R 的屏蔽机制感到有些沮丧(我可能会在这方面提出自己的问题,但如果您感兴趣,目前只需尝试使用包 RMySQLRSQLite相同的过程并按此顺序加载它们;使我的 RMySQL 内容崩溃)并且非常希望切换到始终使用 <namespace>::foo()而不仅仅是 foo()全场全部 我的脚本。

然而,使用 <namespace>::foo()比使用“本地副本”效率低(例如 namespace..foo <- <namespace>::foo() ;我可以为感兴趣的人提供示例,但自己测试很容易)。

制作本地副本对 来说是一种享受其他 我正在加载的包(大部分)确实有一个命名空间,但在我自己的代码变成“包”之前,它确实是 不是 .

所以我虽然“让我们将我的东西来源到 NS <- newenv(parent=emptyenv()),然后应用与其他包相同的例程”。但 R 不会让我:

setGeneric(
name="fooBar",
signature=c("src"),
def=function(src, ...){
standardGeneric("fooBar")
}
)
setMethod(
f="fooBar",
signature=signature(src="character"),
definition=function(src, ...){
cat(src, sep="\n")
}
)
# These would go into:
"Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R"
"Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R"

# This works:
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R")
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R")

# This does not:
NS <- new.env(parent=emptyenv())
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R", local=NS)
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R", local=NS)

eval(parse(file="Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R"), envir=NS)
eval(parse(file="Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R"), envir=NS)

错误:
> source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R", local=NS)
Error in eval.with.vis(expr, envir, enclos) :
could not find function "setGeneric"
> source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R", local=NS)
Error in eval.with.vis(expr, envir, enclos) :
could not find function "setMethod"

知道我可能做错了什么吗?

最佳答案

我的天啊!对不起各位,这有点尴尬:

我已经改用 new.env(parent=emptyenv())始终如一地防止在缓存环境时出现一些内存膨胀并且已经习惯了它,以至于我忘记了在某个时间拥有不同的父环境确实有意义;-)

在这种情况下 NS <- new.env()会做的伎俩。

关于r - 向不同于 .GlobalEnv 的环境采购方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095294/

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