Skip to content

Instantly share code, notes, and snippets.

@lgallen
Created July 18, 2017 02:23
Show Gist options
  • Save lgallen/d768b529edd314e519de2bc466372758 to your computer and use it in GitHub Desktop.
Save lgallen/d768b529edd314e519de2bc466372758 to your computer and use it in GitHub Desktop.
A efficient implementation of cosine similarity created for a Shiny app about games.
cosine_similarity_vec <- function(row_index, df){
row <- df[row_index,]
mat <- df[-row_index,]
numerator <- rowSums(sweep(mat, MARGIN=2, row, "*"))
denominator <- sqrt(sum(row**2)) * sqrt(rowSums(mat**2))
similarities <- numerator/denominator
game_numbers <- 1:dim(df)[1]
game_numbers <- game_numbers[! game_numbers %in% row_index]
df_similarity <- data.frame(game_numbers, similarities)
df_similarity <- df_similarity %>% arrange(desc(similarities))
return(df_similarity)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment