2017-12-22 77 views
5

Czy istnieje sposób deklarowania przestrzeni nazw i eksportowania do niej funkcji, aby można było uzyskać do niej dostęp za pomocą ::, bez tworzenia całego pakietu?Jak utworzyć przestrzeń nazw i wyeksportować do niej funkcję?

następujące prace dla ::: ale nie :::

ns <- namespace::makeNamespace("my_namespace") 
assign("test",7, env=ns) 
my_namespace:::test # Triple colon - works. 
# [1] 7 
my_namespace::test # Double colon - doesn't work. 
# Error: 'test' is not an exported object from 'namespace:my_namespace' 

Czy istnieje alternatywa dla assign która stałaby ostatnią pracę linii? (Celem jest umożliwienie symulacji pakietu podczas jego rozwijania, aby inne pliki mogły go używać tak, jakby był kompletny, ale można go szybko ponownie załadować, używając source, a nie devtools::install.)

+1

Proszę wskazać, czy używasz pakiety nie bazowych. Nie można znaleźć funkcji 'makeNamespace'. – nicola

+0

@nicola Przeprosiny - to jest przestrzeń nazw :: makeNamespace. Zmieniłem to pytanie. – apc53c

Odpowiedz

2

base::namespaceExport(ns, ls(ns)) wydaje się działać (oczywiście można również użyć podzestawu jako listy obiektów do eksportu w drugim argumencie). Użyj go po zdefiniowaniu wszystkich obiektów w przestrzeni nazw, które chcesz wywóz:

ns <- namespace::makeNamespace("my_namespace") 
assign("test", 7, env = ns) 
base::namespaceExport(ns, ls(ns)) 

my_namespace::test 

wyjściowa:

7 
Powiązane problemy