2017-11-03 157 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]]