Nothing
#' @importFrom methods is
buildKNND <- function(D, k = 5, return_neighbors_order = T, mode = "all") {
## print("Start knn_graph_from_dist")
if (!is(D, "matrix") | !is(D, "dist")) {
stop("D (X) mast be a matrix or dist!")
}
if (!is(D, "dist")) {
D <- as.dist(D)
}
N <- (1 + sqrt(1 + 8 * length(D))) / 2 # number of cells
if (k >= N) {
stop("Not enought neighbors in data set!")
}
if (k < 1) {
stop("Invalid number of nearest neighbors, k must be >= 1!")
}
row <- function(i, N) {
return(c(
if (i > 1) D[(i - 1) + c(0:(i - 2)) * (N - 1 - c(1:(i - 1)) / 2)],
NA,
if (i < N) D[((i - 1) * (N - 1) - ((i - 1) * (i - 2) / 2) + 1):(((i - 1) * (N - 1) - ((i - 1) * (i - 2) / 2) + 1) + N - i - 1)]
))
}
neighbors <- t(sapply(1:N, function(i) {
order(row(i, N))[1:k]
}))
adj.knn <- split(neighbors, rep(1:nrow(neighbors), times = ncol(neighbors)))
graph.knn <- igraph::graph_from_adj_list(adj.knn, duplicate = F, mode = mode)
graph.knn <- igraph::simplify(graph.knn, remove.multiple = T)
igraph::E(graph.knn)$weight <- 1
if (return_neighbors_order) {
res <- list(
graph.knn = graph.knn,
order = neighbors
)
} else {
res <- list(graph.knn = graph.knn)
}
return(res)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.