我試圖創建一個引用從它被調用來創建一個唯一的ID範圍的函數:R - 如何從被調用的函數中找到調用函數的環境?
uniqueid <- function(name, envir = NULL) {
if(identical(envir, globalenv())) {
e = envir
} else if (is.null(envir)) {
e = parent.frame()
} else if (is.environment(envir)) {
e = envir
} else {
stop("given non-default argument \'envir\' is not an environment")
}
return(paste(sep = "",
sub('<environment: (.*)>', '\\1', capture.output(e)),
".",
name
)
)
}
我能做些什麼,使這項工作,我認爲它應該工作的方式嗎?者繼續在返回其定義的功能範圍,而不是在那裏進行評估:
hello <- new.env()
hello$env <- new.env()
eval(envir=hello$env, {
print(environment())
print(hello$env) #hello$env is an environment
print(hello) #hello is an environment
uniqueid('hi')
})
我試圖讓這些至少一個投其所好,但它似乎並不像它想上班。 R或者返回全局環境,或者爲函數調用實例創建的臨時框架/環境的範圍不斷變化。該ID需要在多個呼叫之間重現並取決於環境。
我知道我可以通過環境,但我開始懷疑是否做主叫的環境中捕捉實際上是可能的。
什麼是'hello'?它是'hello < - new.env(); hello $ env < - new.env()'? –
@ mathematical.coffee兩者!我試圖在嵌套環境中查看它是否存在多少環境問題,但與此無關。 – VermillionAzure
你舉的例子是不可複製的 - 不能創建'hello'和'parent.frame'需要'N'作爲參數,而不是環境,或者你會得到一個錯誤。 –