2013-02-08 64 views
5

我有一個數據幀有三列:ref,target,distance。每個參考對同一組目標都有一個測量距離,我想得到每個參考的最小距離向量。現在我正在用for循環來做這件事,但似乎應該有一種方法來對此進行矢量化。向量化在R中的數據幀循環使用

這裏是我的代碼:

refs <- levels(data$ref) 

result <- c() 
for (ref in refs) { 
    # Find the minimum distance for observations with the current ref 
    # but be sure to protect against ref == target! 
    best_dist <- min(data[data$ref == ref & data$target != ref,]$distance) 
    result <- c(result, best_dist) 
} 

上午我通過使我的數據幀設置這樣還是有向量化一個很好的方式註定?謝謝您的幫助!

回答

6

永遠不要在一個循環中使用ccbind,rbind來生長對象。該對象每次都會被複制。 而是預先分配到正確的大小(或者如果結果是流體,則估計過高)。

話雖這麼說,這裏不

需要一個循環,我喜歡data.table S代表內存效率和編碼優雅。

​​

如果裁判和目標以不同等級的(如評論所說)係數列,則要麼使他們具有相同的水平,或者轉換爲字符

DT[as.character(ref) != as.character(target), list(bestdist = min(distance)), by = ref] 
+0

我想你一個')'缺少那裏... – adibender

+0

ta。現在修復.. – mnel

+0

這似乎不太正常。嘗試此操作時出現以下錯誤:** Ops.factor(ref,target)中的錯誤:級別因數集不同** 但是,** DT [,list(bestdist = min(distance)),by = ref] ** 是否產生輸出,但沒有ref!=目標檢查。 – weitzner