2014-07-14 21 views
2
負荷命名空間

是否可以手動創建並加載一個命名空間環境foo(未做實際foo包),這樣我們就可以使用雙冒號操作foo::test訪問在這種環境中的對象?如何手動創建和R中

attach功能附加列表或環境搜索路徑:

foo <- list(test=123) 
attach(foo) 
get("test", "foo") 

但這給foo::test用戶訪問明顯。

+2

所以你想用'::'來訪問環境中的對象而不是'$'? – A5C1D2H2I1M1N2O1R2T1

+2

也許相關:R的Konrad Rudolph的[modules](https://github.com/klmr/modules)系統(不確定你想要實現什麼)。 – A5C1D2H2I1M1N2O1R2T1

回答

1

事實證明,這是可能與大部分無證namespace包:

library(namespace) 
ns <- makeNamespace("myNamespace") 
assign("test", 7, env=ns) 
setNamespaceInfo(ns, "exports", as.environment(list(test="test"))) 
print(myNamespace::test) 

不知道如何安全的,這是雖然。例如sessionInfo不再有效:

> sessionInfo() 
Error in if (pkgpath == "") { : argument is of length zero 
+0

您還可以查看'modules'如何創建名稱空間:https://github.com/klmr/modules –