2017-11-03 161 views
-1

我再次看到一些遺留R代碼,試圖讀取用戶的頭腦。看起來他們正在使用Python風格,從而他們定義了一個空R矢量,然後使用for循環將結果附加到一個矢量。將data.table行添加到空向量---做正確的data.table事

library(data.table) 
dtable = read.table("path/filename.txt",header=TRUE,sep="\t",check.names=FALSE) 

定義這個data.table後,這裏是什麼 這裏是正在做什麼:

empty_vector <- c() 

for(i in 1:nrow(dtable)) 
{ 
empty_vector <- append(empty_vector,strsplit(dtable[i,6],":")[[1]][2]) 
} 

這是一個相當大的data.table,用+ 500K行。

(1)我們不應該使用for循環。有一個data.table的方法來做到這一點。因此,定義一個空向量並將結果追加到這個向量中並不是R.什麼是「R方法」?

編輯:我認爲程序員是在Python的思維是這樣的:

empty_list = [] ## equivalent to R vector 

for i in range(10): 
    empty_list.append(i) 

print(empty_list) ## now [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

怎麼會有人做這樣的事情,因爲這是R和我們迭代一個data.table行?

+0

看起來像破碎的代碼給我。請提供示例數據。但是,應該沒有理由爲此循環並使用append。追加速度很慢。 – CCurtis

+0

@CCurtis看我的編輯。我認爲他們想要做的事情類似於通過迭代將項目附加到Python中的空列表。 – ShanZhengYang

回答

0

這可以在R中非常簡單地完成。對於表格中的每一行,它們都從一列中的文本中提取一些值。然後他們需要這些值的向量。假設數據表的第6列的名稱是colnname6這變成

emtpy_list = dtable[, strsplit(colnname6, ":")[2]]