R - 改善简单循环的性能

Dan*_*tes 1 performance r

我是R的初学者,所以我很难想到"R路"......

我有这个功能:

upOneRow <- function(table, column) {
  for (i in 1:(nrow(table) - 1)) {
    table[i, column] = table [i + 1, column]
  }
  return(table)
}
Run Code Online (Sandbox Code Playgroud)

这似乎很简单,并且不应该花那么长的时间来运行,但是在行数约为300k的数据帧上,运行所花费的时间是不合理的.什么是正确的方法来解决这个问题?

sgi*_*ibb 7

而不是循环,你可以尝试这样的事情:

n <- nrow(table)
table[(1:(n-1)), column] <- table[(2:n), column];
Run Code Online (Sandbox Code Playgroud)

矢量化是关键

  • 我认为这不会提供与OP功能相同的输出.从一个输入对象`table < - data.frame(x = 1:10)`开始,OPs函数产生:`[1] 2 3 4 5 6 7 8 9 10 10`,而你的代码产生`[1 ] 1 1 2 3 4 5 6 7 8 9`.恕我直言,你的答案的基本前提是正常的. (2认同)