2016-05-13 64 views
1

我有這樣的代碼,使用餘弦相似度通過以下方式計算數據幀中的重複:首次循環(nrow)時間,以便每次使用一條推文,然後將餘弦相似度結果與此推文進行比較其他推文使用第二個循環。在R語言中嵌套for-loop

這裏是我的代碼:

for (i in 1:nrow(temp)) { 
    dup=0 
    one_Tweets = tweets$Tweet[i] 
    cos_similarity = data.frame("v1"=NULL) # NULL So that don't write previous value 
    cos_similarity=data.frame(sim <- round(sim.strings(AllTweets,one_Tweets), digits = 3)) 
    names(cos_similarity) = c("v1") 

    for (b in i+1:nrow(temp)) { 
    Tweet_cos=cos_similarity$v1[b] 
    if (Tweet_cos >= 0.900) { 
     count = count+1 
     tweets$flag[b]= 1 
    }else { #if (Tweet_cos <0.900) { 
     tweets$flag[b]= 2 
    } 
    Tweet_cos=0 
    } 
    dup=tweets$duplicate[i]= tweets$duplicate[i]+count 
    count = 0 
} 

我在第一循環的一個問題,進入了一個時間雖然在數據幀10000個鳴叫號鳴叫。

和我得到的錯誤:

Error in if (Tweet_cos >= 0.9) { : missing value where TRUE/FALSE needed 
+1

嘗試'彙總(臨時)',看看你是否有'在Tweet_cos – Bulat

+0

NA'值環境Tweet_cos值= NA_real_,使用後彙總(溫度)我看到值 – user3588494

+0

查看結果:'summary(Tweet_cos) Min。第一曲。中位數均值3曲。最大。 NA's NA NA NA NA NA NA 1' – user3588494

回答

0

我不還是有代表把它發表評論,但我覺得你越來越不適用,因爲這個問題/中矢量Tweet_cos NULL。調試從代碼中刪除此部分:

for (b in i+1:nrow(temp)) { 
    Tweet_cos=cos_similarity$v1[b] 
    if (Tweet_cos >= 0.900) { 
     count = count+1 
     tweets$flag[b]= 1 
    }else { #if (Tweet_cos <0.900) { 
     tweets$flag[b]= 2 
    } 
    Tweet_cos=0 
    } 
    dup=tweets$duplicate[i]= tweets$duplicate[i]+count 
    count = 0 

print(cos_similarity$v1)替換整個。理想情況下,你應該看到一些由def定義的NA/NULL不能與0.9進行比較,因此也是錯誤。

如果迭代次數過多/循環,則嘗試打印ib的數值,並在此處輸入錯誤並僅打印cos_similarity$v1

請考慮分享小樣本數據,以便其他人可以複製你的問題

+0

我刪除了這部分並打印cos_similarity $ V1 ..結果:'[2205] 0.489 0.615 0.699 0.649 0.616 0.757 0.603 0.666 0.669 0.616 0.716 0.658 0.649 0.682 0.740 0.578 0.696 0.661 0.719 0.737 0.734 0.631 0.724 0.721 0.690 0.544 0.645 0.617 0.618 0.586 0.600 0.539 0.594 0.716 0.637 0.674 0.699 0.582' – user3588494