2013-08-02 2 views
3

Я хочу использовать функции из пакетов Bioconductor hypergraph и hyperdraw без загрузки пакетов. При запуске примера из hyperdraw виньеткиR вызов функции без загрузки пакета

dh1 <- hypergraph::DirectedHyperedge("A", "B", "R1") 
dh2 <- hypergraph::DirectedHyperedge(c("A", "B"), c("C", "D"), "R2") 
hg <- hypergraph::Hypergraph(LETTERS[1:5], list(dh1, dh2)) 
hgbph <- hyperdraw::graphBPH(hg) 

Я получаю ошибку:

Error in hyperdraw::graphBPH(hg) : could not find function "hyperedges" 

Если я пытаюсь загрузить hyperedges:

hyperedges <- hyperdraw:::hyperedges 

Я получаю ошибку

Error in get(name, envir = asNamespace(pkg), inherits = FALSE) : 
    object 'hyperedges' not found 

Когда я загружаю оба пакета с использованием library или require, я не получаю ошибки (при запуске вышеуказанного кода без hypergraph:: и hyperdraw::).

Причина, почему я не хочу, чтобы загрузить пакеты, потому что я строю пакет, который использует hyperdraw и hypergraph только одной функции, и я предпочел бы поставить эти пакеты в Suggests чем в Depends в моем DESCRPTION файле.

У кого-нибудь есть идея, как это решить?

+0

HAve не пытался запустить это, но попробуйте: 'hyperedges <- hyperdraw ::: hyperedges' –

+0

Это также дает сообщение об ошибке – user1981275

+1

Если вы создаете пакет, 'даже в одной функции, вы ** должны ** поместить их в свой файл' DESCRIPTION', по крайней мере, как 'Импорт:' (что в любом случае предпочтительнее 'Depends:'). Насколько я знаю, это не так. 'Предлагает:' для пакетов, используемых только в виньетках и примерах. –

ответ

5

hyperdraw имеет это в его файл описания,

Depends:  R (>= 2.9.0), methods, grid, graph, hypergraph, Rgraphviz 

и это, опираясь на поиск hypergraph::hyperedges на search() пути. Лично я считаю, что гиперссылка должна содержать строку

importFrom(hypergraph, hyperedges) 

в файле NAMESPACE. В настоящее время лучше всего добавить Depends: hyperdraw в ваш файл DESCRIPTION и до importFrom(hyperdraw, <whatever functions you need>). Я связался с сопровождающим hyperdraw, чтобы попросить их обновить NAMESPACE, как указано выше; тогда вы могли бы просто Imports: hyperdraw. Я думаю, вы просто делаете работу для себя и расстраиваете своих пользователей, пытаясь использовать предложения или другие подходы, чтобы подорвать необходимость формальных зависимостей.

+0

Хорошо, если я правильно его понимаю, 'hyperedges' не экспортируется' hyperdraw'? Я получил его для запуска теперь с помощью «hyperdraw» в Depends и 'hypergraph' в Imports, и я загружаю все функции, которые мне нужны в моей« NAMESPACE ». Наверное, сейчас я сохраню это. Большое спасибо! – user1981275

Смежные вопросы