2
Я собираюсь рассчитать расстояние в Манхэттене в R, но у меня есть проблема, как проверить, существует ли ключ в хеше.Манхэттенское расстояние в R
Мой код выглядит следующим образом. Ошибка, которую я получаю, соответствует заявлению if
.
library("hash")
h <- hash(list(Tom=list(Film1=4.0, Film2=1.0, Film3=4.0, Film4=4.0, Film5=1.0), Jon=list(Film1=3.0, Film2=5.0, Film3=4.0, Film4=2.5, Film5=3.0)))
manhattan_dist <- function(rating1, rating2){
distance <- 0
for(key in rating1){
if(has.key(key, rating2))
distance <- distance + (abs(rating1[[1]] - rating2[[1]]))
}
return(distance)
}
dist <- manhattan_dist(h$Tom, h$Jon)
dist
И ошибка:
Ошибка (функция (классы, FDEF, mtable): не смог найти наследуемый метод для функции 'has.key' для подписания «Числовой", "список"»
' ч $ Tom' является объект 'list', вы не работают с' hash' OBJE cts больше. Так 'has.key' не будет работать. 'for (key in names (rating1)) if (is.element (key, names (rating2))) distance <- distance + (abs (rating1 [[1]] - rating2 [[1]]))' будет, например. – lukeA
@ lukeA спасибо за ваш ответ, эта ошибка решена, thx, но я по-прежнему получаю неправильный результат - 0, и это должно быть 4, вы могли бы взглянуть и проверить, где проблема. –
Вы нашли ответ на свой вопрос. Если да, ответьте на свой вопрос. Спасибо –