[R] function pointer question

Jan van der Laan djvanderlaan at gmail.com
Mon Apr 26 08:56:53 CEST 2010


Giovanni,

You can use the '...' for that, as in:

loocv <- function(data, fnc, ...) {
 n <- length(data.x)
 score <- 0
 for (i in 1:n) {
   x_i <- data.x[-i]
   y_i <- data.y[-i]
   yhat <- fnc(x=x_i,y=y_i, ...)
   score <- score + (y_i - yhat)^2
 }
 score <- score/n
 return(score)
}

scoreks <- loocv(data,gaussiankernel, h=0.5)


Regards,
Jan







On Mon, Apr 26, 2010 at 1:53 AM, Giovanni Azua <bravegag at gmail.com> wrote:
> The beauty of trial and error ... if I leave the non x, y parameters i.e. h as global parameters rather than formal parameters for gaussiankernel it works fine basically I don't pass anymore h=0.5 to gaussiankernel but consume it from a global variable. Ugly but works ...
>
> Best regards,
> Giovanni
>
> On Apr 26, 2010, at 1:38 AM, Giovanni Azua wrote:
>
>> Hello,
>>
>> I have the following function that receives a "function pointer" formal parameter name "fnc":
>>
>> loocv <- function(data, fnc) {
>>   n <- length(data.x)
>>   score <- 0
>>   for (i in 1:n) {
>>     x_i <- data.x[-i]
>>     y_i <- data.y[-i]
>>     yhat <- fnc(x=x_i,y=y_i)
>>     score <- score + (y_i - yhat)^2
>>   }
>>   score <- score/n
>>   return(score)
>> }
>>
>> I would like to use it like this:
>>
>> ##
>> ## Estimator function using Gaussian Kernel
>> ##
>> gaussiankernel <- function(x,y,h) {
>>   modelks <- ksmooth(x,y,kernel="normal",bandwidth=h,x.points=x)
>>   yhat <- modelks$y
>>   return(yhat)
>> }
>>
>> scoreks <- loocv(data,gaussiankernel(h=0.5))
>>
>> I expected this to work but it doesn't :( basically I wanted to take advantage of the named parameters so I could pass the partially specified function parameter "gaussiankernel" to loocv specifying only the h parameter and then let loocv specify the remaining parameters as needed ... can this be tweaked to work? The idea is to have loocv generic so it can work for any estimator implementation ...
>>
>> I have more than 6 books now in R and none explains this important concept.
>>
>> Thanks in advance,
>> Best regards,
>> Giovanni
>>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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