2015-03-26 2 views
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' для подписания «Числовой", "список"»

+1

' ч $ 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

+0

@ lukeA спасибо за ваш ответ, эта ошибка решена, thx, но я по-прежнему получаю неправильный результат - 0, и это должно быть 4, вы могли бы взглянуть и проверить, где проблема. –

+0

Вы нашли ответ на свой вопрос. Если да, ответьте на свой вопрос. Спасибо –

ответ

0

должен работать так, если вы передаете Вектор

manhattan_dist <- function(rating1, rating2){ 
    distance <- abs(rating1-rating2) 
    distance <- sum(distance) 
    return(distance) 
} 
Смежные вопросы