2017-02-14 16 views
0

Я пытаюсь создать hashmap в R с ключом в качестве имени экрана пользователя (строки) Twitter и значения как числа его твитов, которые я просканировал (целое число).has.key метод в хеш-пакете R, не сохраняющий строковый ключ должным образом

user_count_map <- hash() 
i=1 
while(i<= num_tweets){ 
screen_name <- tweets_df[i,]$screenName 
#print (screen_name) 
#str(screen_name) 
if(has.key(screen_name,user_count_map)==TRUE){ 
    count <- user_count_map$screen_name 
    user_count_map$screen_name <- (count +1) 
} else { 
    user_count_map$screen_name <- 1 
} 
i = i+1 
} 

Есть около 17K твитов в dataframe tweets_df (так num_tweets ~ 17K) и есть, конечно, пользователи, для которых я собрано более 1 твит. Проблема в том, что оператор «if» никогда не выполняется, и элемент управления всегда переходит к оператору «else». После выполнения этого кода, длина этой карты равен 1. Здесь выход клавиш() и значений() метод: -

values(user_count_map) 
screen_name: 1 

keys(user_count_map) 
'screen_name' 

Здесь один выход ул (screen_name): -

chr "Ixxxxxxxxa" 

Очевидно, что существует проблема хэширования в том, как переменная screen_name разрешена/хеширована и сохранена на карте. Что я могу сделать, чтобы исправить это? Я довольно новичок в R. Любая помощь будет оценена по достоинству.

ответ

1

Вы неправильно ссылаетесь на элементы хэша. Ваше заявление
user_count_map$screen_name <- 1
дает ключ «имя_экран» значение 1. Он не оценивает переменную , называемую screen_name. Он использует буквенную строку «screen_name». Вместо этого вам необходимо использовать
user_count_map[screen_name] <- 1.
Это будет оценивать переменную screen_name и использовать значение как хэш-ключ.

Ваш весь сегмент кода следует читать:

user_count_map <- hash() 
i=1 
while(i <= num_tweets){ 
    screen_name <- tweets_df[i,]$screenName 
    if(has.key(screen_name,user_count_map)==TRUE) { 
     count <- user_count_map[screen_name] 
     user_count_map[screen_name] <- (count +1) 
    } else { 
     user_count_map[screen_name] <- 1 
    } 
    i = i+1 
} 
+0

Использование '[' не работает, либо, используя '[[' оператор делает. Я пытаюсь понять, почему. Спасибо – opensam

+0

Нечетный. «[« работал для меня на одном тестовом примере, но у меня не было полного фрейма данных для тестирования. – G5W