[R] About Passing Arguments to Function

Charilaos Skiadas cskiadas at gmail.com
Fri May 23 03:36:57 CEST 2008


On May 22, 2008, at 9:14 PM, Edward Wijaya wrote:

> Hi,
>
> Below I have a function mlogl_k,
> later it's called with "nlm" .
>
> __BEGIN__
> vsamples<- c(14.7, 18.8, 14, 15.9, 9.7, 12.8)
>
> mlogl_k <- function( k_func, x_func, theta_func, samp) {
>      tot_mll <- 0
>      for (comp in 1:k_func) {
>        curr_mll <- (- sum(dgamma(samp, shape = x_func,
> scale=theta_func, log = TRUE)))
>        tot_mll <- tot_mll + curr_mll
>      }
>
>      tot_mll
> }
>
> # Calling the function above
> mlogl_out <- nlm(mlogl_k, mean(vsamples), k_func =2, x_func = 1,
> theta_func = 1, samp=vsamples)
>
> __END__
>
> I thought under NLM, I already assign
> the parameter correctly.
> However it gives me the following error.
>
> Error in f(x, ...) : unused argument(s) (14.3166666666667)
> Calls: nlm -> <Anonymous> -> f
> Execution halted
>
>
> What's wrong with my code above?

nlm passes the following values over to mlogl_k: mean(vsamples),  
k_func =2, x_func = 1, theta_func = 1, samp=vsamples

Now, f is called with these arguments, and all its arguments are  
matched by the named arguments. Then it does not know what to do with  
the "mean(vsamples)" argument. Hence the error: f is called with one  
more argument than it can handle.

It is not clear with respect to what variables you want the  
minimization. Right now all the named variables are treated as  
constants, and there is no variable left with respect to which  
mlogl_k is supposed to be maximized. Read the documentation for nlm  
carefully: Your function should have one more argument (like the  
alpha in the question you asked yesterday).

> - Edward

Haris Skiadas
Department of Mathematics and Computer Science
Hanover College



More information about the R-help mailing list