[R] can I call user-created functions without source() ?

Spencer Graves spencer.graves at pdf.com
Mon Jun 19 19:32:23 CEST 2006


	  I'd like to echo Duncan's comment about creating 'man' pages for 
functions.  I find myself writing man pages for functions I may never 
include in an R package, just because it helps me think through what I'm 
trying to do.  I think I get better code faster.  It's like preparing a 
map before starting on a journey through unknown territory:  I may think 
I know the destination and more or less every step of the way.  However, 
if it's very far, it helps to make a plan first;  then when I encounter 
something I hadn't anticipated, it makes it much easier to figure out 
what to do without sabotaging something else.

	  Hope this helps.
	  Spencer Graves

Duncan Murdoch wrote:
> On 6/19/2006 11:38 AM, Michael H. Prager wrote:
>> Rob,
>>
>> I accomplish what you ask by putting my functions into a dedicated 
>> directory, starting R there and sourcing them, and loading the resulting 
>> workspace in .Rprofile with this:
>>
>> attach("d:/R/MHP/MHPmisc/.RData")
> 
> This seems like a nice approach.  Some comments:
> 
> 1.  attach or load?
> 
> You could also use
> 
>   load("d:/R/MHP/MHPmisc/.RData")
> 
> One difference is that this would load the functions into the user's 
> workspace, overwriting any existing functions of the same name, whereas 
> attach() puts them on the search list.  If the user made changes to the 
> functions, they would replace the loaded ones (for that session, not in 
> the .RData file).
> 
> Another difference is that attach() is cumulative.  I.e. if you forget 
> and load() again, the functions will just revert to their saved 
> definitions, but if you forget and attach() again, you'll get another 
> copy of the functions in memory.  Probably harmless, but potentially 
> confusing if you think detach() is going to remove them.
> 
> I don't know which of attach() or load() you'd find to be preferable.
> 
> 2.  If you use the package system, you will be encouraged to create man 
> pages for your functions.  This is work, but I think it pays off in the 
> end.  I often find that when I document a function I realize an error in 
> the design, and I end up improving it.  It's also useful to have 
> documentation for functions that you don't use every day, or when using 
> functions written by someone else.
> 
> Duncan Murdoch
> 
>> I find that procedure simpler than learning the package mechanism.  It 
>> is easy to add new functions periodically.
>>
>> Not long ago, I posted the R code I used to automate the process.  As 
>> the archive seems unreachable right now (from here, anyway) and the code 
>> is relatively short, I'll post it again:
>>
>> ##########################################################
>> ## 00make.r       MHP      Dec 2005
>> ## This R script clears the current workspace, sources all R scripts
>> ## found in the working directory, and then saves the workspace for
>> ## use in other R sessions.
>>
>> # Clear all existing objects in workspace:
>> rm(list=ls())
>>
>> # Make a list of all R source files in this directory:
>> flist = list.files(path=".", pattern=".+\.r")
>>
>> # Remove from the list all files containing the string "00":
>> # Such files should be used for temporary funcs:
>> flist2 = flist[-grep("00",flist)]
>>
>> # Source the files:
>> for (i in 1:length(flist2)) {
>>    cat("Sourcing", flist2[i],"\n")
>>    source(flist2[i])
>>    }
>> # Remove temporary objects:
>> rm(i,flist,flist2)
>> # Save workspace:
>> save.image()
>> # Write message to user:
>> cat("\nNOTE: The workspace has been saved with all functions.\n",
>>     "     When exiting R, please do NOT save again.\n")
>> ls()
>> ##########################################################
>>
>> I run that script straight from the (Windows) command line with the 
>> following shell script:
>>
>> rterm.exe --no-restore --no-save < 00make.r > 00make.txt
>>
>> You will probably need to modify that slightly to work under Unix/Linux.
>>
>> Hope that helps.
>>
>> ...Mike
>>
>>
>>
>> on 6/19/2006 5:36 AM Rob Campbell said the following:
>>> Hi,
>>>
>>> I have to R fairly recently from Matlab, where I have been used to
>>> organising my own custom functions into directories which are adding to
>>> the Matlab search path. This enables me to call them as I would one of
>>> Matlab's built-in functions. I have not found a way of doing the same
>>> thing in R. I have resorted to using source() on symlinks located in the
>>> current directory. Not very satisfactory.
>>>
>>> I looked at the R homepage and considered making a "package" of my
>>> commonly used functions so that I can call them in one go:
>>> library(myFuncions, lib.loc="/path/to/library") Perhaps this is the only
>>> solution but the docs on the web make the process seem rather
>>> complicated--I only have a few script files I want to call! Surely
>>> there's a straightforward solution?
>>>
>>> How have other people solved this problem? Perhaps someone has a simple
>>> "package skeleton" into which I can drop my scripts?
>>>
>>>
>>> Thanks,
>>>
>>> Rob
>>>   
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html



More information about the R-help mailing list