【发布时间】:2012-02-05 00:21:52
【问题描述】:
[此问题已在chat room, by Spacedman 中解决,但我会发布它以供其他人使用。]
我有一个函数myFunc,它在其中创建localFunc。 (注意:这不是在包中,而是在全局环境中。)我想知道localFunc 在搜索路径中的位置,因为我想通过mvbutils::foodweb 对其进行分析。
这是一个例子:
myFunc <- function(){
require(data.table)
require(mvbutils)
localFunc <- function(x){
return(as.data.table(x))
}
vecPrune <- c("localFunc",ls("package:data.table"))
ix <- match("data.table",search())
tmpWeb <- foodweb(where = c(1,ix), prune = vecPrune, plotting = FALSE)
return(tmpWeb)
}
但是,对myFunc() 的调用似乎并不表示localFunc 调用data.table()。这是不正确的 - 什么给出了?
(注意:where 参数指定搜索路径。)
更新 1:正如 Tommy 和 Spacedman 所指出的,诀窍是指定 environment()。对foodweb() 的调用指的是where = c(1, ix)。索引1 是一个错误。这是因为认为.GlobalEnv(通常(总是?)search() 向量中的第一项)是搜索的正确位置。那是错误的。相反,应该参考environment(),正确的调用如下。 (注意:ix 指定data.table() 在search() 输出中的位置。)
tmpWeb <- foodweb(where = c(environment(),ix), prune = vecPrune, plotting = FALSE)
这出现在对this question 的回答中,在一个名为checkScriptDependencies 的函数中,它将R 脚本文件中的代码包装到一个本地函数中,然后由foodweb 分析。这是如何使用environment() 的有限示例,Tommy 已经很好地解释了如何使用它以及在此上下文中的类似功能。
【问题讨论】:
标签: r namespaces