【发布时间】:2018-04-16 17:43:52
【问题描述】:
我再次查看一些遗留的 R 代码,试图读懂用户的想法。看起来他们使用的是 Python 风格,他们定义了一个空的 R 向量,然后使用 for 循环将结果附加到向量。
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 方法可以做到这一点。
(2) 那么,定义一个空向量并将结果附加到该向量不是 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 的行,有人会如何做这样的事情?
【问题讨论】:
-
对我来说看起来像是损坏的代码。请提供示例数据。但是是的,应该没有理由为此循环并使用附加。追加非常慢。
-
@CCurtis 查看我的编辑。我认为他们试图做的类似于通过迭代将项目附加到 Python 中的空列表中。
标签: r for-loop vector append data.table