[R] How to load functions in R

Henrik Bengtsson hb at stat.berkeley.edu
Fri Sep 12 02:28:06 CEST 2008


Wow...

source() on a text file is the way to go - forget everything else.  If
you have multiple *.R script files, in a directory, say R/, you can
load them all by:

pathnames <- list.files(pattern="[.]R$", path="R/", full.names=TRUE);
sapply(pathnames, FUN=source);

or even shorter:

sapply(list.files(pattern="[.]R$", path="R/", full.names=TRUE), source);

This way the changes you need to do for setting up a package to a minimal.

FYI, in the R.utils package there is a utility function
sourceDirectory() that makes this even easier- this function can keep
track of what files have been changed since last time you sourced a
directory.  Just do

sourceDirectory("R/", modifiedOnly=TRUE);

to load all your *.R scripts.  If you then update one of the files, just do

sourceDirectory("R/", modifiedOnly=TRUE);

again, to reload that file.  All other non-modified files will be
ignored, which can be convenient if you have a lot of files.

Cheers

/Henrik




On Thu, Sep 11, 2008 at 12:14 PM, Adam D. I. Kramer
<adik-rhelp at ilovebacon.org> wrote:
> Source(file.path) executes the file at file.path in order, just as if you
> had typed it in.
>
> So, the source file should in fact name each function in turn:
>
> f1 <- function(x) { ... }
> f2 <- function(x) { ... }
> ...etc.
>
> So a good way to debug is to just copy and paste lines from your source file
> into the R command line, and see if they behave as expected.
>
> --Adam
>
> On Thu, 11 Sep 2008, Adaikalavan Ramasamy wrote:
>
>> Strange.
>>
>> source() should read all the function in that file unless there was a
>> syntax error or something else preventing the other function from being
>> parsed correctly. Could you send us a simplified example that reproduces
>> this problem?
>>
>> Thanks.
>>
>> Regards, Adai
>>
>>
>>
>> Mihai.Mirauta at bafin.de wrote:
>>>
>>>  Hello,
>>> It seems that all methods work. Source() however loads only the last
>>> function. with save(a,b,file="path") i can save more than 1 function. Thanks
>>> a lot,
>>>
>>> Mihai
>>> -----Ursprüngliche Nachricht-----
>>> Von: Yihui Xie [mailto:xieyihui at gmail.com] Gesendet: Donnerstag, 11.
>>> September 2008 16:48
>>> An: a.ramasamy at imperial.ac.uk
>>> Cc: Mirauta, Mihai; r-help at r-project.org
>>> Betreff: Re: [R] How to load functions in R
>>>
>>> We may just read them in the R console instead of an external editor, and
>>> "fix()" or "edit()" them when we need to make any modifications. A trivial
>>> advantage of saving them as an image file in Windows is that you can
>>> double-click the file and R will be started with these objects loaded
>>> automatically. Anyway, to save the functions as ASCII files or even write a
>>> package are also good solutions :-)
>>>
>>> Regards,
>>> Yihui
>>>
>>> On Thu, Sep 11, 2008 at 10:34 PM, Adaikalavan Ramasamy
>>> <a.ramasamy at imperial.ac.uk> wrote:
>>>
>>>> I would recommend saving the functions into a separate file and then
>>>> using
>>>> source() as bartjoosen suggested.
>>>>
>>>> I do not recommend using save() here because the output is non-readable
>>>> (even when using ascii=TRUE option). Which means that you have to load() it,
>>>> then copy-and-paste into an editor before making changes and then running it
>>>> again in R and then save() again.
>>>>
>>>> Another better option is to consider making your own package. It may
>>>> sound complicated but once you mastered it, it makes your functions more
>>>> portable and encourages you to document it. Further, the function
>>>> package.skeleton() simplifies much of it.
>>>>
>>>> Regards, Adai
>>>>
>>>>
>>>>
>>>> Yihui Xie wrote:
>>>>
>>>>> Hi, you may save your functions somewhere on your disk using "save()"
>>>>> and load them next time when you want to use them. See ?save and ?load
>>>>>
>>>>> Yihui
>>>>>
>>>>> On Thu, Sep 11, 2008 at 9:30 PM,  <Mihai.Mirauta at bafin.de> wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I am trying to use self created functions in other scripts than the
>>>>>> one where they are stored.
>>>>>> For the moment I am using the following structure of commands to do
>>>>>> that:
>>>>>>
>>>>>> 1. Load the text file with the functions in the current script:
>>>>>> x=parse("path")
>>>>>> 2. transform the tex in a function: f1=eval(x[1]), f2=eval(x[2]) if
>>>>>> more than one function is stored in the text file 3. use the functions as
>>>>>> normal
>>>>>>
>>>>>> Is there another possibility to do the same?
>>>>>> Thank you,
>>>>>>
>>>>>> Mihai Mirauta
>>>>>>
>>>>>>      [[alternative HTML version deleted]]
>>>>>>
>>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Yihui Xie <xieyihui at gmail.com>
>>> Phone: +86-(0)10-82509086 Fax: +86-(0)10-82509086
>>> Mobile: +86-15810805877
>>> Homepage: http://www.yihui.name
>>> School of Statistics, Room 1037, Mingde Main Building, Renmin University
>>> of China, Beijing, 100872, China
>>>
>>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>



More information about the R-help mailing list