我目前正在开发一个函数,该函数适用于 2 列的大矩阵(值的数量通常 > 2000),并且存在时间问题。
这是我的矩阵的头部: matrix
这是我的功能:
get <- function()
{
v <- sample(1:1e6,20000, replace=TRUE) #for example
table <- #mymatrix
for ( i in 1:nrow(table))
{
b <- which(v > table[i,1] & v < table[i,2]) #want index between 2 intervals
}
return(b)
}
问题是,当我对整个表重复循环时,它太长了,而且我找不到如何修复它(仍在 R 中学习)。
最佳答案
正如 Andrey 在评论中所说,您只返回最后一行的结果。您也没有将 table
传递到函数中(事实上,您的函数没有参数),并且也不清楚 v
代表什么以及特别是为什么它的值比 table
的行数还要多。
但是,假设您想要所有行的结果,您可以做两件事:
- 不要使用
which
,您可能不需要数字索引。 - 使用矢量化代替
for
循环:
get = function(table) {
v = sample(1 : 1E6, 20000, replace = TRUE)
v > table[, 1] & v < table[, 2]
}
就是这样。
关于r - R 中的速度优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894193/