bacP <-function(trueLabels,predictedLabels){ #just check if both input arguments are of type factor if(!is.factor(trueLabels) || ! is.factor(predictedLabels)){ throw("both arguments have to be a factor") } #what classes are possbible posClasses <- levels(trueLabels) #how many different classes? numClass <- length(posClasses) #preallocate space accWClasses <- rep(0,numClass) #loop through different classes and calculate within class accuracy for (i in 1:numClass){ allC <- which(trueLabels==posClasses[i]) hits <- which(predictedLabels[allC] == posClasses[i]) accWClasses[i] <- length(hits) / length(allC) } return(mean(accWClasses)) }