private - инкапсуляции в классе / scope / struct ect '.
внутренняя - герметизация в сборках.
Некоторое время назад я использовал ту же ссылку (код Python Брайана О'Салливана) для написания R-версии Slope One. Я вставляю приведенный ниже код на случай, если он поможет.
predict <- function(userprefs, data.freqs, data.diffs) {
seen <- names(userprefs)
preds <- sweep(data.diffs[ , seen, drop=FALSE], 2, userprefs, '+')
preds <- preds * data.freqs[ , seen]
preds <- apply(preds, 1, sum)
freqs <- apply(data.freqs[ , seen, drop=FALSE], 1, sum)
unseen <- setdiff(names(preds), seen)
result <- preds[unseen] / freqs[unseen]
return(result[is.finite(result)])
}
update <- function(userdata, freqs, diffs) {
for (ratings in userdata) {
items <- names(ratings)
n <- length(ratings)
ratdiff <- rep(ratings, n) - rep(ratings, rep(n, n))
diffs[items, items] <- diffs[items, items] + ratdiff
freqs[items, items] <- freqs[items, items] + 1
}
diffs <- diffs / freqs
return(list(freqs=freqs, diffs=diffs))
}
userdata <- list(alice=c(squid=1.0, cuttlefish=0.5, octopus=0.2),
bob=c(squid=1.0, octopus=0.5, nautilus=0.2),
carole=c(squid=0.2, octopus=1.0, cuttlefish=0.4, nautilus=0.4),
dave=c(cuttlefish=0.9, octopus=0.4, nautilus=0.5))
items <- c('squid', 'cuttlefish', 'nautilus', 'octopus')
n.items <- length(items)
freqs <- diffs <- matrix(0, nrow=n.items, ncol=n.items, dimnames=list(items, items))
result <- update(userdata, freqs, diffs)
print(result$freqs)
print(result$diffs)
userprefs <- c(squid=.4)
predresult <- predict(userprefs, result$freqs, result$diffs)
print(predresult)