我在我的例子有一个问题关于sapply
在R.我使用它留一交叉验证在交叉验证使用sapply的
##' Calculates the LOO CV score for given data and regression prediction function
##'
##' @param reg.data: regression data; data.frame with columns 'x', 'y'
##' @param reg.fcn: regr.prediction function; arguments:
##' reg.x: regression x-values
##' reg.y: regression y-values
##' x: x-value(s) of evaluation point(s)
##' value: prediction at point(s) x
##' @return LOOCV score
loocv <- function(reg.data, reg.fcn)
{
## Help function to calculate leave-one-out regression values
loo.reg.value <- function(i, reg.data, reg.fcn)
return(reg.fcn(reg.data$x[-i],reg.data$y[-i], reg.data$x[i]))
## Calculate LOO regression values using the help function above
n <- nrow(reg.data)
loo.values <- sapply(seq(1,n), loo.reg.value, reg.data, reg.fcn)
## Calculate and return MSE
return(???)
}
我对sapply
的问题有以下几种:
- 我可以使用多个参数和功能,即
sapply(X1,FUN1,X2,FUN2,..)
,其中X1
和X2
是我的功能分别为FUN1
和FUN2
函数参数。 - 在上面的代码中,我将
1:n
应用于函数loo.reg.value
。但是,这个函数有多个参数,实际上是3:整数i
,回归数据reg.data
和回归函数reg.fcn
。如果sapply函数有多个参数,和我的X
正好覆盖的参数之一,它sapply把它作为“第一个参数”?所以它会和sapply(c(1:n,reg.data,reg.fcn),loo.reg.value, reg.data, reg.fcn)
一样?
谢谢您的帮助
检查:HTTP://计算器。com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega for a comprehensive overview and this:http://stackoverflow.com/questions/ 17490297/apply-different-functions-to-different-elements-of-vector-in-r查看如何使用具有多个参数的多个函数。 –
@ Ferdinand.kraft'mapply'有一个特定的用法,它与此处的用法不同,您希望将函数用作参数。 'mapply'和'sapply'都有用处,但我不明白'mapply'在这种情况下是如何应用的? –
@GavinSimpson,回答OP的第一个问题,可以使用'mapply(function(f,x)f(x),list(FUN1,FUN2),list(X1,X2))'。 –