apply()与用户定义的函数

时间:2014-03-11 12:15:42

标签: r apply

我正在尝试为逻辑回归编写成本函数,并且只使用for循环设法这样做。我想使用apply函数,但是有一些问题。 鉴于以下数据:

     ones    exam1    exam2 decision
[1,]    1 34.62366 78.02469        0
[2,]    1 30.28671 43.89500        0
[3,]    1 35.84741 72.90220        0
[4,]    1 60.18260 86.30855        1
[5,]    1 79.03274 75.34438        1
[6,]    1 45.08328 56.31637        0

回归函数只是参数和输入值的线性组合的sigmoid函数。

所以这是我写的代码:

sigmoid <- function(y){
    return (1/(1 + exp(-y)))
}

hyp <- function(param, input){
    return (sigmoid(param %*% input))
}

cost <- function(param, temp){
    costcumul <- 0
    for(i in 1:length(temp[,1])){
        costcumul <- costcumul + temp[i,4]*log(hyp(param,temp[i,-4])) + (1-temp[i,4])*log(1 hyp(param,temp[i,-4]))
    }
    return ((-1)*costcumul/length(temp[,1]))
}

在使用成本函数之前,我将data.frame转换为矩阵,并将该矩阵用作成本函数中的参数。

我想在cost()函数中使用apply()函数,而不是遍历每一行,在使用apply之后,我想使用rowSums对每一行求和。

首先,我重写了成本函数,以便它只计算单行的成本:

testfunc <- function(p,x){
return (x[4]*log(hyp(p,x[-4])) + (1-x[4])*log(1-hyp(p,x[-4])))
}

然后我尝试以下列方式使用apply:

apply(temp,1,testfunc,param = "param")

我收到错误的形式:“FUN中的错误(newX [,i],...):未使用的参数(param =”param“)”

我认为我的问题是指定函数的参数。在我的testfunc()函数中我有参数x,我是否需要在apply()的调用中指定该参数,或者apply函数是否知道在这种情况下非指定参数应该是一行temp矩阵?

0 个答案:

没有答案