У меня есть этот список
mylist = list(structure(c(1L, 2L, 4L, 6L, 7L, 8L, 11L, 13L, 14L, 16L), env = <weak reference>, graph = "8e4abfef-5278-11e8-bbcf-c5dd5cc2b8d4", class = "igraph.vs"),
structure(c(9L, 17L), env = <weak reference>, graph = "8e4abfef-5278-11e8-bbcf-c5dd5cc2b8d4", class = "igraph.vs"),
structure(c(12L, 15L, 18L, 20L), env = <weak reference>, graph = "8e4abfef-5278-11e8-bbcf-c5dd5cc2b8d4", class = "igraph.vs"))
и датафрейм
mydf = structure(list(session_id = c(861L, 861L, 862L, 862L, 868L, 868L,
871L, 871L, 874L, 874L, 875L, 875L, 877L, 877L, 879L, 879L, 879L,
880L, 880L, 883L, 883L, 884L, 884L, 886L, 886L, 892L, 892L, 894L,
894L, 895L, 895L, 897L, 897L, 898L, 898L, 899L, 899L, 900L, 900L,
900L, 900L, 901L, 901L, 902L, 902L, 904L, 904L, 907L, 907L, 908L
), requestId = c(11, 11, 3, 1, 14, 17, 6, 11, 16, 20, 12, 16,
11, 8, 6, 1, 15, 4, 4, 10, 1, 17, 6, 5, 1, 5, 3, 6, 6, 13, 6,
3, 5, 18, 1, 6, 17, 11, 21, 3, 16, 14, 12, 4, 1, 10, 17, 20,
21, 10)), .Names = c("session_id", "requestId"), row.names = c(NA,
-50L), class = c("tbl_df", "tbl", "data.frame"))
Теперь я хочу написать функцию RecommenSet, которая будет принимать mylist и pages в качестве аргументов и применять алгоритм LCS из библиотеки qualv к элементам списка и страницам, сгруппированным по идентификаторам сессий, и где она получит максимальное значение LLCS (т.е. его длину) для каждого соответствующего session_id
.
pages = mydf%>% group_by(session_id) %>% do(predicSet = recommenSet(mylist,as.vector(.$requestId)))
recommenSet = function(mylist,pages){
recSet = lappy(mylist,function(x){
a = x[order(x)]
a = as.character(a)
b = pages[order(pages)]
b = as.character(b)
LCS(a,b)
#give me setdiff of a and b where LLCS is max among mylist items
setdiff(a,b)
})
#recSet = unlist(recSet);
#recSet = unique(recSet);
}
return(recSet)
}
например. для session_id = 877 соответствующие страницы c (11,8), поэтому мы располагаем их в порядке c c (8,11)
Теперь мы применяем LCS между каждым списком mylist (3 списка) и страницами сессий (сгруппированными по session_ids) и ищем, какой список дает максимальное значение LLCS для соответствующих session_ids, а затем возвращаем setdiff () ч / б наборы, которые имеют максимум LLCs.