【问题标题】:Appending data.table rows into an empty vector---doing the right data.table thing [closed]将 data.table 行附加到一个空向量中---做正确的 data.table 事情[关闭]
【发布时间】: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


【解决方案1】:

这可以在 R 中非常简单地完成。对于表中的每一行,它们都从一列中的文本中提取一些值。然后他们想要这些值的向量。假设数据表第6列的名字是colnname6这就变成了

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

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2018-12-02
    • 2022-01-07
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多