Drkcore

08 07 2010 R Tweet

RのNAMESPACEファイル

Rでパッケージ作るときにパッケージ変数として扱いたいものを

pit_dir <- file.path(Sys.getenv("HOME"),".pit")
pit_config <- file.path(pit_dir,"pit.yaml")
pit_profile_file <- NULL

と先頭に書いておきたいのだけどNAMESPACEファイルを作成すると

> library(pit)
 要求されたパッケージ yaml をロード中です 
> pit.switch("test")
 以下にエラー pit.switch("test") : 
   'pit_profile_file' に対するロックされたバインディングの値は変更できません 

とでる。ちなみにpit.switchはこれ

pit.switch <- function(name=NULL){
  if(is.null(name)) name <- "default"
  pit_profile_file <<- file.path(pit_dir, paste(name, ".yaml", sep=""))
  config <- pit.config()
  ret <- config$profile
  config$profile <- name
  write(as.yaml(config),pit_config)
  if(name != ret) write(paste("Profile switch to",name,"from",ret), stderr())
  return(ret)
}

環境をとってきてunlockBindingすればいいんだろうなぁと思うんだけどやり方が分からなくて、

pit_dir <- file.path(Sys.getenv("HOME"),".pit")
pit_config <- file.path(pit_dir,"pit.yaml")
#pit_profile_file <- NULL
assign("pit_profile_file",NULL,pos =".GlobalEnv")

とやって、直接大域環境に変数をセットしてるんだけど、これって本当はどうするのがいいんだろうか?

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
通常1~4週間以内に発送


追記10.07.08

環境オブジェクトを作るという方法もあるそうなので、こっちでやってみた。

pit_dir <- file.path(Sys.getenv("HOME"),".pit")
pit_config <- file.path(pit_dir,"pit.yaml")
conf<-new.env()
conf$pit_profile_file <- NULL

こっちのほうが精神衛生上よろしいかも。それにしてもRの環境ってなんだろか?Lispみたいな感じで考えとけばいいのかな?あとでソースコードを探ってみよう。

参考

  • 一次的作業環境の使用 new.env(TRUE,NULL)
  • MooseでLispを実装してみる(ラムダリストと変数の局所化)

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021