我有一些带有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()