Я должен сделать свою собственную функцию чистоты для задания, и мне дали значения, чтобы проверить это, но ожидаемая чистота, которую я должен получить, не та, которую я получил.Я должен рассчитать чистоту и процент выбросов в данных.Это моя пользовательская функция чистоты.Где я ошибаюсь?:
purityFunction = function(cluster, groundtruth, outliers = FALSE){
clusterlevel = levels(cluster)
clusterclass = table(cluster, groundtruth)
n = nrow(clusterclass)
population = 0
for(i in 1:n){
clustersize = sum(clusterclass[i,])
population = population + clustersize
}
percentage = 0
if(clusterlevel[1] == "0"){
outliers = sum(clusterclass[1,])
percentage = outliers / population
population = population - outliers
}
purity = sum(apply(clusterclass, 2, max))/length(cluster)
return(c(purity, percentage))
}
Если выбросы равны false, мне не стоит возвращать процент, но если он установлен в true, мне нужно вернуть процент.
Есть ли способ оптимизировать эту функцию?Я проверил это на следующих значениях:
- a = (0,1,1,1,1,2,2,3)
- b = (A, A, A,E, E, D, D, C)
Я должен получить:
Функция чистоты (a, b) = 0,714
но я получил: 0,875
Эта функция не может вычислить процент, потому что у нее есть проблема с этой строкой: if (clusterlevel[1] == "0")
Возвращает эту ошибку:
Ошибка в if (clusterlevel [1] == "0") {: аргумент имеет нулевую длину
Как исправить и эту ошибку?