kNNImpute(x, k, x.dist = NULL, impute.fn, verbose = T)
impute.fn = function(values, distances, k) { ranks = order(distances) smallest.distances = distances[ranks][1:k] #values corresponding to smallest distances knn.values = values[ranks][1:k] knn.weights = 1 - (smallest.distances / max(distances)) weighted.mean(knn.values, knn.weights) }A simple mean can be implemented as follows:
impute.fn = function(values, distances, k) { ranks = order(distances) mean(distances[ranks][1:k]) }
x = matrix(rnorm(100),10,10)
x.missing = x > 1
x[x.missing] = NA
kNNImpute(x, 3)
Run the code above in your browser using DataLab