[R] Calling external file

Michael Dewey lists at dewey.myzen.co.uk
Sun Oct 4 13:41:42 CEST 2015


In line

On 03/10/2015 23:56, Steven Yen wrote:
> Thanks Bill. Simplified content of max.calls.R (with repeated calls to
> maxLik removed) are shown below in the message. No, fn does not exist in
> the environment.

Which explains why R cannot find it.

  I call a routine (say probit.R compiled into a library) to
> use maxLik. Inside this routine,
> 1. In probit.R. likelihood function is defined yet in another nested
> routine;

If I understand you correctly it is that function which you need to pass 
to max.calls. So alter max.calls as below

> 2. Function "max.calls" is also nested in that  probit.R;
> Then, a call to max.calls works.
>
> What I am trying to accomplish is, instead of inserting the identical
> function (or set of lines) in every routine like probit.R, I like to either
> compile max.calls.R or source it from inside probit.R. Thanks.
>
>
> On Sat, Oct 3, 2015 at 4:47 AM, Steven Yen <syen04 at gmail.com> wrote:
>
>> Hi
>> I collect a list of calls to a package in a function (routine) so that I
>> do not need to repeat the same sets of codes from program to program. In
>> the following, inserting the function into each program works. Then, I
>> place the function elsewhere in a PC folder, and include in with a 'source'
>> command. This does not work; it complains about a function (fn below) not
>> defined.
>> Compiling the function into a library file does not work either (with all
>> sorts of error messages saying this and that not defined).
>> Steven Yen
>>
>> fn <- function(beta){
>>    f<-... (define f in this routine)
>> return(f)
>> }
>>
>> max.calls<-function(method){

max.calls <- function(method, fn = NULL) {
    if(is.null(fn)) warning("You forgot to supply fn)
>> # *******************************************************
>> # Call maxLike with alternative algorithms
>> # *******************************************************
>>    many<-c("NR","BFGS","BFGSR","BHHH","SANN","CG","NM")
>>    if (method %in% many){
>>      ML<-maxLik(logLik=fn,grad=NULL,hess=NULL,start,
>>                 method,print.level,constraints=NULL, ...)}
>> return(ML)
>> }
>> # This works:
>> ML<-max.calls(method)

Now in probit.R replace the call to max.calls(method) with
max.calls(method, whatever_function_you 
defined_in_probit.R_for_the_likelihood)

Of course I may have completely misunderstood what you are driving at.

>>
>> # Does not work:
>> source("z:\\R\\yenlib\\lib\\max.calls.R")
>> ML<-max.calls(method)
>>
>> Error: object 'fn' not found
>>
>>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

-- 
Michael
http://www.dewey.myzen.co.uk/home.html



More information about the R-help mailing list