r中简单for循环的优化



我有一些带有for循环的代码行,看起来像这样:

somevector2 <- c(length = somevector2_length)
for(string in somevector1){
df2 <- df1[df1$col1 == string, ]
ff <- somefunction(df2$col2)
somevector2 <- c(somevector2, ff)
}

根据我的理解,用正确的长度初始化向量应该使循环更快,但是尽管somefunction(df2$col2)做了一些简单的操作,但它仍然需要相当多的时间。somevector1就是一个字符串向量

有没有办法让这个循环在R中更快?非常感谢

对不起,但这不是你应该在SO上发布问题的方式。你应该提供一个可行的例子。同样,这也不是创建固定长度向量的方法。


让我们看看你发布的一个可复制的例子:

##### this makes your example reproducible
somevector1 <- unique(iris$Species)
df1 <- iris
names(df1) <- paste0("col", 5:1)
somefunction <- sum
somevector2_length <- 3

##### this is your code
# somevector2 <- c(length = somevector2_length) # <- this was wrong
somevector2 <- c()

for(string in somevector1){

df2 <- df1[df1$col1 == string, ]
ff <- somefunction(df2$col2)
somevector2 <- c(somevector2, ff)

}

所以这是最终的结果:

somevector2
#>  12.3  66.3 101.3

我建议你使用下面这行代码,而不是你的代码。您将得到类似的结果(它是一个NAMED数字向量)。

tapply(df1$col2, df1$col1, somefunction)
#>    setosa versicolor  virginica 
#>      12.3       66.3      101.3 

可以用unname()

去掉名称

相关内容

  • 没有找到相关文章

最新更新