2016-12-26 5 views
2

環境内で同様の機能をグループ化すると便利です。このようにしてR:名前付き環境で同様の機能を保存する

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) 

私は一緒に関連する関数の一覧を表示することができます

f 
# function() print(1) 
# <environment: 0x000000001df15d80> 

私は環境のハッシュへの参照のみを取得します:私は機能を印刷するとき、とにかく

ls("myenv") 
# [1] "f" # and any other possible function defined in myenv 

パッケージのような実際の名前への参照を取得するといいでしょう:

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> 

パッケージを作成することはできますか?

+5

関連 - http://stackoverflow.com/questions/25925169/how-can-i-apply-a-name-to-an-環境/ 25925283 – thelatemail

+0

@thelatemail:私が重複していると思わない限り、私は受け入れることができる回答を投稿するかもしれません。 – antonio

+0

@thelatemail:確認の結果、機能の印刷では機能しませんが、環境に対してのみ機能することがわかりました。 – antonio

答えて

1

コードが少しあるので、別々の機能で保存すると便利です。

関数を作成した後、今
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> 

ctionは、地球環境から除去され、唯一の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> 
関連する問題