[R] how to organize a lot of R source files

Henrik Bengtsson hb at stat.berkeley.edu
Sun Jan 10 05:21:16 CET 2010


Hi.

On Sat, Jan 9, 2010 at 6:16 PM, Hao Cen <hcen at andrew.cmu.edu> wrote:
> Hi Henrik,
>
> Thanks for your suggestion. I created a directory with 10 R files and
> tried the following and measured its time
>
> system.time(sourceDirectory("~/fun", modifiedOnly = F))
> system.time(sourceDirectory("~/fun", modifiedOnly = T))
>
> But the second line seems to spend as much time as the first line, I
> thought   the second line would be faster since no modification is made.

Use modifiedOnly=TRUE the first time too, and you'll see it'll work
the 2nd time.  When you call it the first time, R consider it as
"modified" (since last time), because it has never seen the code
before (in that R session).  If you add some verbose output in your
scripts, you'll definitely see when the scripts get sourced.

I guess you could say it should the way you did it, but the way it is
currently designed/implemented is that it does not record the last
"source" time unless you use modifiedOnly=TRUE.  Next release will
also support what you did.

>
> Also the first line reports a warning as follows
> In readLines(con = fh) :
>  incomplete final line found on "~/fun/util1.R"
> I don't see such a warning when I use source.

Unrelated.  Nothing to worry about.  I've added readLines(con=fh,
warn=FALSE) for the next release to get rid of such warnings.

/Henrik

>
> Maybe the two issues are related. Please advise.
>
> thanks
>
> Jeff
>
>
> On Fri, January 8, 2010 7:56 pm, Henrik Bengtsson wrote:
>> library("R.utils"); sourceDirectory("myRFiles/", modifiedOnly=TRUE);
>>
>> See ?sourceDirectory (regardless what the Rd help say, any '...'
>> argument is passed to sourceTo()).
>>
>> /Henrik
>>
>>
>> On Fri, Jan 8, 2010 at 7:38 AM, Hao Cen <hcen at andrew.cmu.edu> wrote:
>>
>>> Hi,
>>>
>>>
>>> I wonder what is a better way to organize a lot of R source files. I
>>> have a lot of utility functions written and store them in several source
>>> files (e.g util1.R, util2.R,..utilN.R). I also have a master file in
>>> which the source command is used to load all the util.R files. When I
>>> need to use the utility functions in a new project, I create a new R
>>> file (e.g main.R) in which I "source" the master file.
>>>
>>> The problem with this approach is that anytime a single utility
>>> function is modified, I need to rerun the source command in main.R to
>>> load the master file, which loads all the utility R files via a loop
>>> over each file. Sometimes I have to wait for 10 seconds to get them all
>>> loaded. Sometimes I forget to run the source command. Is there a way in
>>> R to 1)
>>> only reload the file changed (like a make utility) when I run source on
>>> all utility files and/or even better 2)  reload the changed utility
>>> files, when I run a command that use one of those utility functions,
>>> without the need for me to source those files.
>>>
>>> Not sure if packaging solves this issue because the library command has
>>> be used every time a utility function is modified and in addition the
>>> package has to be rebuilt. I don't worry about sharing the source files
>>> at this moment as I am the only user of those utility files.
>>>
>>> This may be a common issue many R users face. I wonder how other R
>>> users solve this issue.
>>>
>>> thanks
>>>
>>> Jeff
>>>
>>>
>>> ______________________________________________
>>> 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