2015-06-17 9 views
7

Ich möchte eine Funktion schreiben, die die Standardwerte auf einen Parameter zurücksetzt, der in allen R-Funktionen in einem Paket gemeinsam ist.Ändern der allgemeinen Standardparameter in allen Funktionen in einem Paket

Ist das möglich?

was ich erdacht ist dies, aber dies gibt nur eine Liste von curried Funktionen:

library(magrittr) 

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

Rohr %>% vom magrittr Paket.

Ich denke, ein Vorbehalt auf diese Weise ist der Verlust der Dokumentation.

Vielleicht könnte ich das lösen, indem ich auf ein Attribut referenziere, das in einem Objekt im Paket geändert und gespeichert werden kann? Folgendes ist ordentlicheres meiner Meinung nach

Antwort

0

Zwar wäre es möglich, dies für die globale Umwelt durch die Zuordnung zu tun, da das Standardverhalten leicht durch detach ing die Umwelt wieder hergestellt werden kann:

Zunächst einige Demo-Funktionen, da ich weiß nicht, welches Paket Sie verwenden wollten:

Jetzt ist hier meine Curry-Paketfunktion. Es benötigt entweder eine Umgebung oder einen Paketnamen als Zeichenvektor (z. B. "package:myPackage"). Alle Funktionen in der Umgebung werden aktualisiert und einer neuen Umgebung hinzugefügt, die zurückgegeben wird. Dies kann dann bei Bedarf attach ed sein.

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) 
} 

Nun einige Demos

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" 
Verwandte Themen