2015-06-17 14 views
7

Chciałbym napisać funkcję, która "resetuje" wartości domyślne do parametru wspólnego dla wszystkich funkcji R w pakiecie.Zmiana wspólnego parametru domyślnego we wszystkich funkcjach w pakiecie

Czy to możliwe?

co ja wymyśliłem to jest, ale to tylko zwraca listę funkcji curry:

library(magrittr) 

function(parameter){ 
    ls("package:packageName") %>% 
    lapply(function(fxnName){ 
     functional::Curry(get(fxn), paramOfInterest = parameter) 
    } 
} 

Rura %>% z pakietu magrittr.

Zgaduję, że jednym z zastrzeżeń w tym kierunku jest utrata dokumentacji.

Być może mógłbym rozwiązać ten problem, odwołując się do atrybutu modyfikowalnego i przechowywanego w obiekcie w paczce?

Odpowiedz

0

Chociaż byłoby możliwe zrobienie tego poprzez przypisanie do globalnego środowiska naturalnego, co następuje neater moim zdaniem, ponieważ domyślne zachowanie może być łatwo przywrócone przez detach ing środowiska:

Pierwsze niektóre funkcje demo odkąd nie wiem, który pakiet chciałeś użyć:

packageDemo <- new.env() 
makeFun <- function(x) {x;function(param) c(x, param)} 
for (i in paste0("f", letters)) assign(i, makeFun(i), packageDemo) 

Oto moja funkcja pakietu curry. Pobiera nazwę środowiska lub paczki jako wektor znaków (np. "package:myPackage"). Wszystkie funkcje w środowisku są przekształcane i dodawane do nowego środowiska, które jest zwracane. W razie potrzeby może to być attach ed.

curryPackage <- function(package, ..., functionNames = NULL){ 
    if (is.character(package) && !grepl("^package:", package)) { 
    package <- paste0("package:", package) 
    } 
    fnNames <- ls(package) 
    if (!is.null(functionNames)) { 
    fnNames <- fnNames[fnNames %in% functionNames] 
    } 
    fnNames <- fnNames[vapply(fnNames, function(x) is.function(get(x, package)), logical(1))] 
    fnList <- lapply(fnNames, function(x){ 
    functional::Curry(get(x, package), ...) 
    }) 
    names(fnList) <- fnNames 
    list2env(fnList) 
} 

Teraz niektóre dema

attach(packageDemo) 
fc("Testing") 
#[1] "fc" "Testing" 
fc() 
#Error in fc() : argument "param" is missing, with no default 

newPack <- curryPackage(packageDemo, param = "demo") 
attach(newPack) 
#The following objects are masked from packageDemo: 
# 
# fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl, fm, fn, fo, fp, fq, fr, fs, ft, fu, fv, fw, fx, fy, fz 
fc("Testing") 
#Error in (function (param) : unused argument ("Testing") 
fc() 
#[1] "fc" "demo" 
Powiązane problemy