r - R 中的速度优化

标签 r function loops optimization

我目前正在开发一个函数,该函数适用于 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/

相关文章:

r - 创建以按组的变量总和为条件的变量

r - pivot_longer : values_ptypes: can't convert <integer> to <character>

javascript - 如何为游戏对象使用抽象构造函数?

javascript - 同步功能无法相应地工作

javascript - 避免 eval(),我需要一种将多个参数传递给变量函数的方法

c# - 制作条件循环条件?

java - 我的程序多了一个循环,如何解决?

r - knitr/rmarkdown/Latex : How to custom justify xtable columns using dcolumn, 同时抑制其他 dcolumn 格式

java - 制作第二个线程时遇到问题

r - 排除状态小于某个聚合值的行