2016-08-05 5 views
0

Gibt es eine elegante Möglichkeit, ein in einem installierten Paket enthaltenes Skript über die Befehlszeile mit Argumenten auszuführen.So führen Sie das in einem Paket enthaltene Skript aus der Shell aus

Also, ich bin mir dessen bewusst, dass wir so etwas wie tun könnte:

Rscript path/package/scritpts/script.R arg1 arg2 arg3 

Aber ich würde etwas, das elegantere ist. Denn path/package kann manchmal lächerlich sein.

+0

Das Beste, was ich kann sich vorstellen, wäre eine Funktion, die die Verwendung von 'system.file 'automatisiert (zB' Rscript pkgfunc package script.R arg1 arg2 arg3'), was den Codegolf hier kaum reduziert. Gibt es einen Grund, dass deine oben genannte Befehlszeile so abscheulich ist? – r2evans

+0

@ r2evans könnten Sie ein Beispiel zeigen, wie Sie das an der Befehlszeile (der spezifische Aufruf) tun würden. –

+0

@chris gleichen Deal, könnten Sie ein Beispiel für einen bestimmten Aufruf zeigen? –

Antwort

0

Dirk eine tragfähige Lösung mittels seiner littler Paket zur Verfügung gestellt hat:

Rscript $(R -e 'cat(system.file("scripts","file.R",package = "pkg"))') arg1 arg2 arg3 
1

nicht viel von einer Antwort, aber ein na ï ve Beispiel mit system.file und so:

# Rscript --vanilla pkgscript.R packagname scriptname.R arg1 arg2 arg3 
args <- commandArgs(trailingOnly = TRUE) 

if (length(args) < 2L) { 
    # print out "Usage:" stuff 
    stop("Usage: ...") 
} else { 
    fnames <- list.files(path = system.file(package = args[1]), pattern = args[2], 
         recursive = TRUE, full.names = TRUE) 
    lfn <- length(fnames) 
    if (lfn == 0L) { 
    stop("no script found for: ", sQuote(args[2])) 
    } else if (lfn == 1L) { 
    # do something with args[-(1:2)] 
    source(fnames) 
    } else { 
    stop("multiple scripts found for: ", sQuote(args[2])) 
    } 
} 
Verwandte Themen