Можно ли использовать методы в среде, отличной от .GlobalEnv
?
Я постепенно расстраиваюсь из-за маскирующего механизма R (возможно, я вернусь с собственным вопросом в этом отношении, но если вам интересно, сейчас просто попробуйте использовать пакеты RMySQL
и RSQLite
в том же процессе и загружая их в указанном порядке, приводит к сбою моих материалов 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"
Есть идеи, что я могу делать не так?