2015-09-23 5 views
6

ich aus einem Python-Hintergrund kommen und ich versuche, mit R aufstehen zu beschleunigen, so tragen Sie bitte mit mirFinden Sie die Quelldatei mit R Funktionsdefinition

ich eine R-Datei - util.R mit den folgenden Zeilen:

util.add <- function(a,b) a + b 
util.sub <- function(a,b) { a - b } 

ich es Quelle wie folgt:

source('path/util.R')

ich habe jetzt zwei Funktionsobjekte und wollen eine functio schreiben n wie folgt:

getFilePath (util.add)

Das würde mir dieses Ergebnis

[1] "path/util.R"

+2

Vielleicht warten, bis Ihre vorherige Frage beantwortet wird, bevor Sie eine andere ... – Frank

+0

IMO die beiden Fragen sind unabhängig – user1827356

+0

Dies kann schwierig oder etwas hacky in R. Wenn Sie ausführlicher beschreiben, warum Sie dies tun möchten, vielleicht einige erfahrene R-Leute könnten vielleicht einen anderen Ansatz vorschlagen. – joran

Antwort

5

Graben in das srcref Attribut eines der geladenen Funktionen erscheint Arbeit, wenn Sie tief genug gehen ...

source("tmp/tmpsrc.R") 
str(util.add) 
## function (a, b) 
## - attr(*, "srcref")=Class 'srcref' atomic [1:8] 1 13 1 31 13 31 1 1 
## .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x8fffb18> 
srcfile <- attr(attr(util.add,"srcref"),"srcfile") 
ls(srcfile) 
## [1] "Enc"   "filename"  "fixedNewlines" "isFile"  
## [5] "lines"   "parseData"  "timestamp"  "wd"  
srcfile$filename 
## [1] "tmp/tmpsrc.R" 
+0

Wow! Gut graben! – Gregor

+0

Fantastisch, es gibt sogar eine srcfile $ wd für die relativen Pfade! – user1827356

+0

@Ben, das scheint nur im interaktiven Modus zu funktionieren. Nicht wenn ich R mit -e Option oder Rscript mache. Irgendeine Idee, wie man es für die zusätzlichen Bedingungen zur Arbeit bringt? Danke – user1827356

Verwandte Themen