2017-02-14 8 views
0

Rでhashmapを作成しようとしていますが、twitterユーザー(文字列)のスクリーン名とキーでRを作成しようとしています。整数)。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 
} 

データフレームtweets_dfで約17Kツイート(〜17K num_tweetsので)があると私は以上1つのつぶやきを収集している誰のためのユーザーは確かにあります。問題は、 'if'文が決して実行されず、コントロールが常にが 'else'ステートメントに渡されることです。このコードの実行後に、このマップの長さは、ここでは1であるキーの出力(IS)と値()メソッド: - ここ

values(user_count_map) 
screen_name: 1 

keys(user_count_map) 
'screen_name' 

は、STR(SCREEN_NAME)の一方の出力である: -

chr "Ixxxxxxxxa" 

明らかに、screen_name変数が解決され/ハッシュされ、マップに格納される方法にハッシングの問題があります。これを是正するために私は何ができますか?私はRにかなり新しいです。どんな助けもありがたいです。

答えて

1

ハッシュ要素を間違って参照しています。あなたのステートメント
user_count_map$screen_name <- 1
は、キー "screen_name"に値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

奇数。 "[" 1つのテスト例で私の仕事をしましたが、テストするための完全なデータフレームがありませんでした。 – G5W

関連する問題