R:为什么解析这个数据表需要这么长时间

时间:2015-07-22 20:54:40

标签: r optimization

我有一个数据帧df,它包含15列和1000000行所有整数。我的代码是:

for(i in 1:nrow(df))
{
if(is.null(df$col1[i]) || .... || is.null(df$col9[i]))
df[-i,] #to delete the row if one of those columns is null
}

这已经运行了一个小时,现在还在继续。为什么?它似乎应该是相对较快的代码运行。我怎样才能加快速度?

1 个答案:

答案 0 :(得分:1)

它很慢的原因是R在循环向量时相对较慢。 R中的大多数函数都是矢量化的,这意味着您可以在矢量上执行它们的速度比逐个循环遍历每个元素的速度快得多。另外,我不认为您的数据框中有NULL。我认为你有NAs所以我会认为这就是你所拥有的。即使你有NULL,那么下面的代码仍然有用。

这种语法应该会给你一个很好的速度提升。 这将利用rowSums为其中缺少值的每一行生成NA。

df<-subset(df, !is.na(rowSums(df[,1:10])))

这种语法也应该有用。

df<-df[rowSums(is.na(df[,1:10]))==0,]