R:在命名环境中存储相似的函数

标签 r namespaces

我发现在环境中对类似的功能进行分组很方便。

myenv <-  new.env()
f <- function() print(1)
assign("f", f, myenv)
rm(f) # use before attach to avoid  "object is masked" message
attach(myenv)
rm(myenv)

通过这种方式,我可以列出相关的功能:
ls("myenv")
# [1] "f"   # and any other possible function defined in myenv

无论如何,当我打印函数时:
f
# function() print(1)
# <environment: 0x000000001df15d80>

我只得到对环境哈希的引用,而获得对实际名称的引用(如包)会很好:
sd
function (x, na.rm = FALSE) 
sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x), 
    na.rm = na.rm))
<bytecode: 0x000000001c01d8a8>
<environment: namespace:stats>

是否有可能或我被迫创建一个包?

最佳答案

代码有点多,方便存放在单独的函数中。

print.store.f <- function(x, useSource = TRUE, ...) {
    class(x) <- NULL
    print.function(x, useSource = TRUE, ...)
    cat("<environment: myEnv>\n")
}
storeInEnv <- function(fun, env){
    if( ! env  %in% search()) attach(new.env(), name=env)        
    assign(fun, get(fun, parent.frame()), as.environment(env))
    eval(parse(t=sprintf("class(%s) <- 'store.f'", fun)), as.environment(env))
    rm(list=fun, pos=parent.frame())
}

现在,在创建一个函数之后:
f <- function() print(1)

可以将其存储在必要时创建的环境中,
storeInEnv("f", "myenv")  

现在:
f
# function() print(1)
# <environment: myEnv>

注意该函数已经从全局环境中移除,只存在于myenv中。 :
getAnywhere(f)
# A single object matching 'f' was found
# It was found in the following places
#   myenv
# with value
#  
# function() print(1)
# <environment: myEnv>

关于R:在命名环境中存储相似的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325572/

相关文章:

html - 将节点的内容克隆到不同的命名空间

WPF xmlns : The 'clr-namespace' URI refers to a namespace that is not included in the assembly

r - 将函数应用于数据框的所有元素

css - Rvest,html_nodes 返回空列表和字符串,使用网站

r - r 中的 MATCH 函数

r - 使用 purrr 以编程方式创建新变量?

Java DOM 默认命名空间

r - 如何在 R 中编写有条件运行并包含其他函数的函数

PHP 在删除自动加载器时 Composer 使工作失败

c# - 您如何确保 .Net 始终从 namespace 树的根部搜索 namespace ?