использовать makeActiveBinding внутри пакета - PullRequest
0 голосов
/ 15 января 2019

Мне просто нужна функция R вроде:

> la. <- function (envir = globalenv()) {ls(all = T, envir = envir) }`

с активной привязкой, поэтому мне нужно набирать скобки

> makeActiveBinding('la', la., globalenv())

Так что

> la
[1]  "la"  "la."

Теперь я хочу реализовать функцию la() и связать la внутри пакета Так что когда я загружаю пакет, la готово доступно.

Как связать функцию la.() с символом la в среде пакета?

Какое значение я должен передать аргументу envir функции makeActiveBinding()

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я думаю, что это должно работать:

Позволяет написать две функции внутри пакета:

# function one
ll_ <- function(){
  ls(envir = globalenv(), all.names = TRUE)
}

# function two
l_ <- function(){
  ls(envir = globalenv(), all.names = FALSE)
}

, затем написать вашу функцию onLoad ()

# Runs when package is loaeded
.onLoad <- function(libname, pkgname) {
  ns <-  asNamespace(pkgname)
  makeActiveBinding("ll", ll_,  env = ns) 
  makeActiveBinding("l", l_,  env = ns) 
  namespaceExport(ns, c('ll','l'))
}

При загрузкеваши пакеты, команды l и ll.запустите функции l () и ll ()

Наконец, я уверен, что, встраивая все функции в список и играя с функционалами, определение onLoad () может стать намного легче

СпасибоРомен для вашего предложения

0 голосов
/ 23 января 2019

Это, вероятно, что-то сделать в функции .onLoad, что-то вроде этого в вашем пакете:

NAMESPACE <- environment()

la. <- function(){ 
  ls(all = T, envir = globalenv())
}

.onLoad <- function(libname, pkgname) {
  makeActiveBinding("la", la., NAMESPACE)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...