2015-02-27 18 views
1

Мне нравится использовать функцию reshape из matlab пакета, но мне нужно затем указать base::sum(m) каждый раз, когда я хочу, чтобы суммировать элементы моей матрицы или еще matlab::sum называют, которые только суммы по колонкам ..Выберите функцию для загрузки из R пакета

мне нужно загрузки пакета gtools использовать функцию rdirichlet, но функция gtools::logit маскирует функция pracma::logit, что мне нравится лучше ..

Я Гесс нет таких вещей, как:

library(loadOnly = "rdirichlet", from = "gtools") 

или

library(loadEverythingFrom = "matlab", except = "sum") 

.. потому что функции из пакета matlab может internaly работать на функцию matlab::sum. Поэтому необходимо загрузить . Но нет ли способа получить это поведение с точки зрения пользователя? Что-то, что будет чувствовать себя, как:

library(pracma) 
library(matlab) 
library(gtools) 
sum <- base::sum 
logit <- pracma::logit 

.. но что бы не портить ls() со всеми этими маленькими utilitary функциями?

Возможно, мне нужно определить собственное пространство имен по умолчанию?

+1

Для двух пакетов с конфликтующими именами, пакет загружен в более высокая позиция 'library (..., pos = number)' будет иметь приоритет. Вы можете видеть расположение своих пакетов с помощью 'search()'. Если вы должны были загрузить 'pracma' в более низком положении, чем' gtools', тогда ваш 'logit' должен быть тем, который вы хотите. Я не знаю, как решить проблему «base :: sum». Я думаю, вам лучше просто использовать синтаксис 'library :: function' для вызова нужной функции. – Vlo

+0

@ Vlo Слишком плохо. Но спасибо за трюк 'pos', это поможет немного .. :) –

+1

Вы можете организовать путь поиска с файлом' .Rprofile' и/или '.onLoad()' в верхней части вашего скрипта –

ответ

3

Чтобы избежать порчи вашего ls, вы можете сделать что-то вроде этого:

.ns <- new.env() 
.ns$sum <- base::sum 
.ns$logit <- pracma::logit 
attach(.ns) 
+0

Я не могу сказать, это хак или нет, но мне это нравится. ;) Я сначала попробую упорядочить мой поиск(), а потом вернусь на колени с трюком .. только для тех случаев, когда я слишком ленив, чтобы использовать '::'. –

1

Насколько я знаю, нет простого ответа на то, чего вы хотите достичь. Единственный грязный хак, о котором я могу думать, это загрузить исходный код пакетов «matlab», «gtools», «pracma» и удалить функции нарушения из их файла NAMESPACE перед установкой из источника (с пакетом R CMD INSTALL).

Однако я бы рекомендовал использовать явное обозначение pracma :: logit, поскольку оно улучшает читаемость вашего кода для других людей и вас в будущем.

Этот сайт дает хороший обзор о пакете пространств имен: http://r-pkgs.had.co.nz/namespace.html

+0

Yope, слишком много грязи для этого взлома, а не дружелюбие. Но спасибо за этот сайт, я многому научился! –

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